1.测试服务器直接kill -9关闭数据库后,数据库无法启动,日志报错: Could not open unix socket lock file /tmp/mysql.sock.lock
去/tmp目录下查看有mysql.sock.lock文件,但是没有权限打开。
-rw-------. 1 root root 6 Mar 18 22:29 mysql.sock.lock
解决: chown -R mysql. mysql.sock.lock
启动正常。
2.记一次主从不同步,重新构建主从,持续报错主键重复,
原因不详,有尝试注入一个空事物,来解决,但是持续报错,然后再找了一台服务器构建主从,发现没有问题了,怀疑这台服务器有问题,便重启了服务器,再次构建主从问题解决
一般处理这样的问题,先看错误日志,如果检查不出来配置问题,那就再搭一个新的重库。
主键矛盾的问题,解决办法:1.删掉重复的。
2.跳过重复的,执行后面的。
基于gtid跳过的方式:
1). stop slave;
2).set gtid_next='Retrieved_Gtid_Set'
Retrieved_Gtid_Set值从show slave statusG获取
3). begin;
4).commit;
5).set gtid_next='automatic'
6).start slave;
3.mysqldump备份
/usr/local/mysql/bin/mysqldump -uroot -p'1qaz@WSX' -h$ip --single-transaction --triggers --set-gtid-purged=ON --routines --events --master-data=2 -A |gzip > $path/redmine_master/all_${ttime}.sql.gz
1. --single-transaction:
可以支持innodb存储引擎热备功能,对innodb可以不锁表进行热备,对于非innodb热备进行锁表
2.--triggers:备份触发器
3.--routines :备份存储过程和自定义函数
4.--events:导出事件
5.--master-data:该选项将binlog的位置和文件名追加到输出文件中。如果为1,将会输出CHANGE MASTER 命令;如果为2,输出的CHANGE MASTER命令前添加注释信息。该选项将打开--lock-all-tables 选项,除非--single-transaction也被指定(在这种情况下,全局读锁在开始导出时获得很短的时间;其他内容参考下面的--single-transaction选项)。该选项自动关闭--lock-tables选项。
官网介绍:
https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html
6.--set-gtid-purged=ON 备份恢复到其他库,从库恢复将gtid信息导出
--set-gtid-purged=OFF备份恢复到本地数据库,主库恢复,避免将gtid信息导出
5.基于gtid构建的主从,从库重新构建主从关系的方法:
1.reset master;
2.reset slave;
3.change master to .............
6.https://i.cnblogs.com/posts/edit;postId=12522697
innodb_max_dirty_pages_pct 通过设置该值为0可以让内存的数据尽快刷新到磁盘,通过,查看show engine innodb status 的modified db pages值很小了说明,就已经刷新完了
7.给普通用户授权可以创建存储函数
root登录后,执行以下命令:
GRANT SUPER ON *.* TO 'public'@'%';
flush privileges;
8.主从不同步
显示:1032报错
Last_SQL_Error: Could not execute Delete_rows event on table mirror.mirror; Can't find record in 'mirror', Error_code: 1032; handler error HA_ERR_END_OF_FILE; the event's master log mysql-bin.000004, end_log_pos 116977
原因:主库再执行delete语句发现从库已经没有这行记录了,但是我真的不知道为何我的架构会出这样的问题
解决:
set global slave_exec_mode='IDEMPOTENT'; ##忽略delete和key矛盾的记录继续往下走,默认为STRICT模式
9.查看语句执行各个环节消耗的情况
set profiling = 1
update t set name where id = 1
SELECT STATE, SUM(DURATION) as total_R, ROUND(100 * SUM(DURATION) / (SELECT SUM(DURATION) FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID = 1), 2) as pct_r, count(*) as calls, sum(DURATION) / count(*) as "R/Call" FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID = 1 GROUP BY STATE ORDER BY Total_R DESC; +--------------------------------+----------+----------+-------+--------------+ | STATE | total_R | pct_r | calls | R/Call | +--------------------------------+----------+----------+-------+--------------+ | query end | 1.003655 | 35641.16 | 2 | 0.5018275000 | | updating | 0.001037 | 36.83 | 1 | 0.0010370000 | | starting | 0.000100 | 3.55 | 1 | 0.0001000000 | | freeing items | 0.000084 | 2.98 | 1 | 0.0000840000 | | Opening tables | 0.000078 | 2.77 | 1 | 0.0000780000 | | System lock | 0.000068 | 2.41 | 1 | 0.0000680000 | | init | 0.000042 | 1.49 | 1 | 0.0000420000 | | Waiting for semi-sync ACK from | 0.000042 | 1.49 | 1 | 0.0000420000 | | end | 0.000041 | 1.46 | 1 | 0.0000410000 | | cleaning up | 0.000035 | 1.24 | 1 | 0.0000350000 | | closing tables | 0.000027 | 0.96 | 1 | 0.0000270000 | | checking permissions | 0.000020 | 0.71 | 1 | 0.0000200000 | +--------------------------------+----------+----------+-------+--------------+