修改主机名导致从库同步失败,这个顿时头大,参考资料有几种同步恢复方法
Slave_IO_Running: NO
Slave_SQL_Running: NO
一、可以先锁表直接scp或者sync服务将master数据库文件直接cp一份到slave目录下先清除slave库中原文件,重新配置pos信息然后启动slave,ok具体方法没有测试,以下资料仅供使用innodb参考使用
二、不锁表恢复slave复制数据库
- select * from INFORMATION_SCHEMA.TABLES\G ## 查看数据库中表信息是否为innodb表
- 如果为myiasm表则必须锁表
FLUSH TABLES WITH READ LOCK; 恢复之后unlock tables;
- show slave status\G;####查看slave同步进程是否正常
- 查看网上使用set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;可以跳过但是设置还是无效,我配置了还是不行
- set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; ##已经允许slave跳过一个同步不了的错误了 结果slave复制线程还是no,因为更换了hostname所以slave无法读取中继日志,则进行下步
- slave库清除之前数据
- drop DATABASE name;
- stop slave;
- reset slave ##清除之前同步信息
- master 操作备份:
- mysqldump -uroot -p --single-transaction --triggers -R -E -F -l --master-data --all-databases > databases.sql
- --single-transaction
通过将导出操作封装在一个事务内来使得导出的数据是一个一致性快照。只有当表使用支持MVCC的存储引擎(目前只有InnoDB)时才可以工作;其他引擎不能保证导出是一致的。当导出开启了--single-transaction选项时,要确保导出文件有效(正确的表数据和二进制日志位置),就要保证没有其他连接会执行如下语句:ALTER TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE,这会导致一致性快照失效。这个选项开启后会自动关闭--lock-tables。 - -l, --lock-tables:对所有表加读锁。(默认是打开的,用--skip-lock-tables来关闭,上面的选项会把关闭-l选项)
- -R:导出存储过程以及自定义函数
- --triggers:导出触发器。该选项默认启用,用--skip-triggers禁用它。
- --master-data:这个选项可以把binlog的位置和文件名添加到输出中,如果等于1,将会打印成一个CHANGE MASTER命令;如果等于2,会加上注释前缀。并且这个选项会自动打开--lock-all-tables,除非同时设置了--single-transaction(这种情况下,全局读锁只会在开始dump的时候加上一小段时间,不要忘了阅读--single-transaction的部分)。在任何情况下,所有日志中的操作都会发生在导出的准确时刻。这个选项会自动关闭--lock-tables。
- --events, -E :导出事件。
- -F, --flush-logs
在开始导出前刷新服务器的日志文件。注意,如果你一次性导出很多数据库(使用 -databases=或--all-databases选项),导出每个库时都会触发日志刷新。例外是当使用了--lock-all-tables或--master-data时:日志只会被刷新一次,那个时候所有表都会被锁住。所以如果你希望你的导出和日志刷新发生在同一个确定的时刻,你需要使用--lock-all-tables,或者--master-data配合--flush-logs。
- 将备份文件scp 到slave主机,或者直接在slave主机使用mysqldump
scp -p port mysql.bak.sql root@192.168.128.101:/back
这时我们通过查看备份出来的sql文件
head -n 30 zabbix.sql
-- MySQL dump 10.13 Distrib 5.7.26, for Linux (x86_64)
--
-- Host: localhost Database: zabbix
-- ------------------------------------------------------
-- Server version 5.7.26-log
--
-- Position to start replication or point-in-time recovery from
--
CHANGE MASTER TO MASTER_LOG_FILE='master-bin.000013', MASTER_LOG_POS=154;
--
-- Current Database: `zabbix`
--
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `zabbix` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_bin */;
- 通过发现加上参数--master-data就不用在slave上用再配置以下slave连接master pos配置了, 同时如果--master-data=2加上参数=2表示可以参考上面的注释
###change master to ##可省略
#### master_host='192.168.1.4',master_user='slave',master_password='123456',
#### master_log_file='mysql- bin.000013',master_log_pos=6273973;
mysql -uroot -p -e 'source /back/zabbix.sql' #导入数据库
此时启动start slave;
show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
- ok测试运行正常