一、环境
CentOS : 7.3.1611 (Core)
mysql:8.0.20
二、遇到的问题
1.查看主从同步发现下列问题
error connecting to master 'repl@192.168.0.21:3306' - retry-time: 60 retries: 4 message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection。
注:主从同步的账号最好不要用'caching_sha2_password' ,使用'mysql_native_password'
修改后,启动slave(start slave),又报错
Last I0 Error: Got fatal error 1236 from master when reading data from binary log: "Could not find first log file name in binary log index file。
彻底同步无望!!只能重新同步!
三、开始同步
1、导出主数据库数据
mysqldump -uroot -p -h192.168.31.XX --single-transaction --master-data=2 --all-databases > /data/alldatabase.sql
#参数解析
--single-transaction 启用一个事务来进行备份操作,备份过程中不会对数据库进行锁操作
--master-data=2 该选项将当前服务器的binlog的位置和文件名追加到输出文件中(show master status)。如果为1,将会输出CHANGE MASTER 命令;如果为2,输出的CHANGE MASTER命令前添加注释信息
2、停止从数据库的同步
>stop slave;
>reset master;
>reset slave all;
3、导入主数据库数据
>source /tmp/alldatabase.sql
>flush privileges; #如果同步所有的库需要执行此步骤,刷新用户信息
4、查看导出数据时binlog的位置
head -n50 alldatabase.sql
5、准备启动slave
# 写入master当前位置
>CHANGE MASTER TO MASTER_HOST='192.168.31.xx', MASTER_USER='replication', MASTER_PASSWORD='xxxxxxx', MASTER_LOG_FILE='fcy4243-bin.000040', MASTER_LOG_POS=127128110;
#启动slave
>start slave;
#查看slave是否正在同步主库
>show slave status\G;
6、查看同步进程
四,遇到的问题
起因:主库上有一个事件(Event),已废弃,我手动在navicat删除,导致主从同步失败
Last_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction 'ANONYMOUS' at source log wlyy6771-bin.000262, end_log_pos 110434944. See error log and/or performance_schema.replication_applier_status_by_worker table for more details about this failure or others, if any.
查看replication_applier_status_by_worker看下问题。
select * from performance_schema.replication_applier_status_by_worker\G;
LAST_ERROR_MESSAGE: Worker 1 failed executing transaction 'ANONYMOUS' at source log wlyy6771-bin.000262, end_log_pos 110434944; Error 'Unknown event 'event_auto_del_memorydata'' on query. Default database: 'zergj'. Query: 'DROP EVENT `zergj`.`event_auto_del_memorydata`'
根据上面的原因就知道从库上没有这个event。
网上没有找到相关的问题和答案。但是判断这个事务不影响其他问题,所以直接跳过:第一步
第一步:stop slave;
第二步:set global sql_slave_skip_counter=1; #跳过此次事务。
第三步:start slave;
第四步:show slave status\G;