MySQL是被广泛应用的关系型数据库,其体积小、支持多处理器、开源并免费的特性使其在 Internet 中小型网站中的使用率尤其高。在使用 mysql 的过程中不规范的 SQL 编写、非最优的策略选择都可能导致系统性能甚至功能上的缺陷。
今天给大家整理 了**五个mysql运维案例,附带问题分析,**来看看你是否能够成功应对?
🔎点击此处查看更多问题及解决方案
一.执行存储过程/函数报错账号不存在
问题描述:执行存储过程报错
mysql>call create_no_by_day('STUDENT','CREATE_TIME');
ERROR 1449 (HY000):The user specified as a definer ('TEST_111'@'172.%.%.%') does not exist
分析:这情况是因为当时机器上这存储过程是由用户’TEST_111’@'172.%.%.%‘创建,但是存储过程导入到了新的机器后,这新机器没有这个用户而报错。
三种解决办法:
1、重建这个存储过程,把definer那段代码取消。
2、在新机器上建立这个用户’TEST_111’@‘172.%.%.%’。
3、修改定义者,替换所有存储过程是这个定义者的为新机器已有账号。
解决:修改定义者
1.查看机器不存在这个账号
select host,user from mysql.user where host='172.%.%.%' and user='TEST_111';
2.替换所有存储过程是这个定义者的为新机器已有账号。
UPDATE mysql.proc set DEFINER='TEST_222@172.%.%.%' where DEFINER='TEST_111@172.%.%.%';
二.批量更新数据卡住
问题描述:批量更新很慢,没添加索引,添加索引被阻塞
分析:事务不自动提交容易造成元数据锁冲突
解决:执行SELECT concat(‘kill ‘,processlist_id,’;’)
FROM performance_schema.events_statements_current a JOIN performance_schema.threads b USING(thread_id)
JOIN information_schema.processlist c ON b.processlist_id = c.id
WHERE a.sql_text NOT LIKE ‘%performance%’ and command=‘sleep’ order by c.time desc;
杀进程
三.一个环境数据库占用空间满情况
问题描述:一个环境数据库空间已满。
分析:数据没有定时清理,没有监控报警。一个保存实时消息的大表上百亿数据占用过大
问题解决:
1.能登陆mysql情况下,truncate table 大表(无用数据,可清除),回收空间
2.不能登陆mysql情况下,删除部分binlog日志,让mysql启动起来,再清理其他数据。
四.数据库迁移
问题描述:已备份了数据,想把数据库导进另一个环境,但是想换一个数据库名字,以免把另一个环境的同名数据库覆盖
问题解决:
1.导出数据
# mysqldump -uroot -pxxx_001 --set-gtid-purged=OFF admin > admin.sql
2. 建新库
mysql>create database admin1;
3. 建立账号,授权
mysql>CREATE USER admin1@'%' identified by 'Admin1_!@#';
mysql>GRANT ALL PRIVILEGES ON admin1.* TO admin1@'%';
mysql>flush privileges;
4. 导入数据到新库admin1
# mysql -uroot -pxxx_001 admin1 <admin.sql
这样,就把原库admin导出的表数据,导入了新库admin1里面。新账号admin1已授权访问新库admin1,新账号密码是Admin1_!@#
注: 操作2,3是sql语句,在mysql里面执行。 操作1,4是在linux命令行上操作。
五.数据库日志出现多个断连记录
问题描述:数据库日志出现多个断连记录,显示为Got an error writing communication packets
分析:有可能是客户端异常退出了,应用重启,也有可能是网络链路异常。这种提示一般是[NOTE],属于提示信息。
问题解决:
关闭警报
set global log_warning=1;
另:若是出现Got timeout reading communication packets或者Got timeout writing communication packets,属于客户端的空连接时间过长,超过了wait_timeout和interactive_timeout的时间,可以调整wait_timeout/interactive_timeout
————————————
以上的5个常见的MySQL问题,你都能够成功解答吗?在日常mysql运维中,会遇到各种各样的问题,希望大家都能够淡定地处理。
其实除了还是要亲身经历与提升专业能力,才能够如鱼得水,轻松运维!本次给大家分享Mysql学习资料,需要的朋友点下方自取。