2.数据文件大小同步
mysql01和mysql02两个数据刚装配完成时,从实施后盾可知。互为主从,数据同步畸形,运行过程中某些原由招致mysql02去同步mysql01毛病,而对外供给办事的vip一向在mysql上,数据一贯写入在mysql01上,最终导致发现时,mysql02数据跟mysql01上的数据相差庞大,必要手工同步,同时也警示我要无视数据同步监控报警的重要性!
对mysql02而言,从上可知。其数据已经没有意思了可以或许直接删除,现在须要的直接将mysql01数据拷贝给mysql02实现主从同步。
环节在于细节处理,落拓不羁向没有问题。mysql01mysql02都开启了二进制binlog中继日志 relaylog和 慢日志slowlog拷贝mysql01系统数据和业务数据到mysql02而不需要mysql01二进制binlog中继日志 relaylog和 慢日志slowlog
1.暂停营业,找一台空闲服务器,将mysql01mysql02所有数据备份
2.别离在mysql01mysql02遏制mysql办事
#systemctlstopmysqld
3.mysql02删除mysql所有其他数据,只备份/opt/data/mysql/auto.cnf文件
#cp/opt/data/mysql/auto.cnf/home/auto.cnf.bak
#rm-rf/opt/data/mysql/*
4.删除mysql01二进制binlog中继日志 relaylog和 慢日志slowlog
#cd/opt/data/mysql
#rm-rf主机名-bin.*主机名-relay-bin.*主机名-slow*
5.拷贝mysql01数据文件到mysql02数据目次
#scp-r/opt/data/mysql/*root@192.168.1.105:/opt/data/mysql/
6.mysql02上还原auto.cnf文件,变更拷贝过去的文件属主属组
#cp/home/auto.cnf.bak/opt/data/mysql/auto.cnf
#chown-Rmysql:mysql/opt/data/mysql/
7.mysql01mysql02上启动 mysql和keepalived
#systemctlstartmysqld
#systemctlrestartkeepalived
#systemctlstatusmysqldkeepalived
登录mysql01
#mysql-uroot-p”MySQL@123″
>showslavestatusG
mysql01同步mysql02畸形
登录mysql02
#mysql-uroot-p”MySQL@123″
>showslavestatusG
发明了报错:
Fatalerror:TheslaveI/OthreadstopbecausmasterandslavehaveequalMySQLserverids;theseidmustbedifferforreplictoworkorthe–replicate-same-server-idoptionmustbeusonslavebutthidoenotalwaimakesense;pleascheckthemanualbeforusit.
关键字眼:masterandslavehaveequalMySQLserverids
清楚一切同步消息:数据库上做如下操作.
>stopslave;
>resetslave;
>resetmaster;
master_port=3306,>changmastertomaster_host=\’192.168.1.104\’.master_user=\’repl\’,master_password=\’MySQL@123\’,master_auto_position=1;
>startslave;
>showslavestatusG
butthemasterhapurgbinarilogcontainGTIDthattheslaverequires.Last_IO_Error:Gotfatalerror1236frommasterwhenreaddatafrombinarilog:\’TheslaveisconnectusCHA NGEMA STERTOMA STER_A UTO_POSITION=1.\’
典范的MySQL封闭GTID主从同步出现1236过错这次报错不一样了谷歌搜索了一下。
个体两种情况会出现以上景象:
1.主库上手动执行清除二进制日志文件
重新同步时2.主库重启。
处置惩罚方式:
查问gtid_purg并记录其值1.mysql01上执行以下饬令。>
#mysql-uroot-p”MySQL@123″
>showglobalvariabllike\’%gtid%\’G
mysql02执行以下饬令,查问gtid_executed,并做记录
#mysql-uroot-p”MySQL@123″
>showglobalvariabllike\’%gtid%\’G
此处mysql02上的gtid_execut值为空。
3.mysql02上执行以下命令停止同步线程及重置同步相关消息
#mysql-uroot-p”MySQL@123″
>stopslave;
>resetslave;
>resetmaster;
该值有两个来源,设置mysqlgtid_purg值。一是主库上查询的gtid_purg二是从库上查询的已经执行过的gtid_execut值。
同步过程会出现其他过错,注重:必定记得加上从库上已经执行过的gtid_execut值若只设置了主库上的gtid_purg此时从库会重新拉取主库上所有的二进制日志文件。导致同步无法执行,但此处我从库的gtid_execut值为空,没什么可加,就不用加了
>set@@global.gtid_purged=\’d19dcd86-39cf-11e9-a540-000c29d0d7ee:1-1042789\’;
master_port=3306,>changmastertomaster_host=\’192.168.1.104\’.master_user=\’repl\’,master_password=\’MySQL@123\’,master_auto_position=1;
>startslave;
>showslavestatusG
剩下的事就是策动办事,看对业务是否有影响。现在,mysql02同步mysql01畸形了完成了mysql01mysql02主主同步。
至少保存了同步前,如果同步失利。mysql01全部数据,停服务器和数据库,回填数据,策动数据库和服务。
用shell脚本批量生成测试用SQL语句
https://my.oschina.net/zhuguowei/blog/474572
ToolforGenerMockData
https://stackoverflow.com/questions/591892/tools-for-generating-mock-data
MySQLShard批量执行工具
https://github.com/shilion/mysqlbatch
处理mysql封闭GTID主从同步出现1236错误成绩