mysql主從不同步解決方法 修改

來源:本站原創 Linux 超過1,046 views圍觀 0條評論

今天發現Mysql的主從數據庫沒有同步

———開啟同步前需要reset slave————————
 
先上Master庫:
 
mysql>show processlist;   查看下進程是否Sleep太多。發現很正常。
show master status; 也正常。
 
mysql> show master status;
+——————-+———-+————–+——————————-+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB              |
+——————-+———-+————–+——————————-+
| mysqld-bin.000001 |     3260 |              | mysql,test,information_schema |
+——————-+———-+————–+——————————-+
1 row in set (0.00 sec)
 
再到Slave上查看
 
mysql> show slave status\G                                               
 
Slave_IO_Running: Yes
Slave_SQL_Running: No
 
可見是Slave不同步
 
下面介紹兩種解決方法:
 
 
方法一:忽略錯誤后,繼續同步
該方法適用于主從庫數據相差不大,或者要求數據可以不完全統一的情況,數據要求不嚴格的情況
 
解決:
stop slave;
 
#表示跳過一步錯誤,后面的數字可變
set global sql_slave_skip_counter =1;
start slave;
 
之后再用mysql> show slave status\G  查看:
 
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
 
ok,現在主從同步狀態正常了。。。
 
 
方式二:重新做主從,完全同步
該方法適用于主從庫數據相差較大,或者要求數據完全統一的情況
 
解決步驟如下:
 
1.先進入主庫,進行鎖表,防止數據寫入
 
使用命令:
 
mysql> flush tables with read lock;
 
 
MariaDB [mysql]> show processlist;  
+——-+————-+———————+——–+————-+——+———————————————————————–+——————————————————————————————————+———-+
| Id    | User        | Host                | db     | Command     | Time | State                                                                 | Info                                                                                                 | Progress |
+——-+————-+———————+——–+————-+——+———————————————————————–+——————————————————————————————————+———-+
| 74658 | root        | localhost:40986     | mysql  | Query       |    0 | NULL                                                                  | show processlist                                                                                     |    0.000 |
| 75092 | testmysql   | 172.16.11.104:55134 | test   | Query       |  545 | Waiting for global read lock ———-鎖定—                                         | INSERT into vote_record_memory  (user_id,vote_id,group_id,create_time ) VALUEs (rand_string(20),FLOO |    0.000 |
+——-+————-+———————+——–+————-+——+———————————————————————–+——————————————————————————————————+———-+
9 rows in set (0.00 sec)

 
注意:該處是鎖定為只讀狀態,語句不區分大小寫
 
2.進行數據備份
 
#把數據備份到mysql.bak.sql文件
[[email protected] mysql]#mysqldump -uroot -p -hlocalhost > mysql.bak.sql
這里注意一點:數據庫備份一定要定期進行,可以用shell腳本或者python腳本,都比較方便,確保數據萬無一失
3.查看master 狀態
 
mysql> show master status;
+——————-+———-+————–+——————————-+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB              |
+——————-+———-+————–+——————————-+
| mysqld-bin.000001 |     3260 |              | mysql,test,information_schema |
+——————-+———-+————–+——————————-+
1 row in set (0.00 sec)
 
4.把mysql備份文件傳到從庫機器,進行數據恢復
 
#使用scp命令
[[email protected] mysql]# scp mysql.bak.sql [email protected]:/tmp/
 
5.停止從庫的狀態
mysql> stop slave;
 
 
6.然后到從庫執行mysql命令,導入數據備份
 
mysql> source /tmp/mysql.bak.sql
 
7.設置從庫同步,注意該處的同步點,就是主庫show master status信息里的| File| Position兩項
 
 
 
————注意使用 reset slave;————

reset slave;
 
change  master to master_host=’172.16.9.62′, master_user=’replication’, master_password=’replication’, master_log_file=’mysql-bin.000008′, master_log_pos=120,master_port=3346;
start slave;

change  master to master_host=’172.16.9.61′, master_user=’replication’, master_password=’replication’, master_log_file=’mysql-bin.000009′, master_log_pos=120,master_port=3346;
start slave;
8.重新開啟從同步
mysql> start slave;

———-start slave 啟動報錯———–

MySQL [mysql]> start slave;
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
MySQL [mysql]> start slave;
ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
MySQL [mysql]>

查看相應日志
日志在哪需要查看對應的配置文件
[[email protected] ~]# tail -f /usr/mysqldata/3346/mysql_3346.err
2017-11-03 21:50:28 2903 [ERROR] Failed to open the relay log ‘./mysql3346-relay-bin.000006’ (relay_log_pos 283).
2017-11-03 21:50:28 2903 [ERROR] Could not find target log file mentioned in relay log info in the index file ‘./shtsmysql02-relay-bin.index’ during relay log initialization.
2017-11-03 21:50:28 2903 [ERROR] Failed to initialize the master info structure
2017-11-03 21:50:28 2903 [Note] Check error log for additional messages. You will not be able to start replication until the issue is resolved and the server restarted.
2017-11-03 21:50:29 2903 [Note] Event Scheduler: Loaded 0 events
2017-11-03 21:50:29 2903 [Note] /usr/mysqlsoft5.6.38_3346/bin/mysqld: ready for connections.
Version: ‘5.6.38-log’  socket: ‘/tmp/mysql3346.sock’  port: 3346  Source distribution
2017-11-06 09:30:02 2903 [Warning] IP address ‘172.16.11.197’ could not be resolved: Name or service not known
2017-11-06 11:46:30 2903 [Note] ‘CHANGE MASTER TO executed’. Previous state master_host=’172.16.9.61′, master_port= 3346, master_log_file=’mysql-bin.000006′, master_log_pos= 120, master_bind=”. New state master_host=’172.16.9.61′, master_port= 3346, master_log_file=’mysql-bin.000008′, master_log_pos= 7151227, master_bind=”.
2017-11-06 11:46:34 2903 [ERROR] Slave SQL: Slave failed to initialize relay log info structure from the repository, Error_code: 1872
從報錯上看,意思是啟動slave時,使用repository中信息初始化relay log結構失敗了。
為什么失敗了?原來是從./shtsmysql02-relay-bin.index文件中找不到./mysql3346-relay-bin.000006文件。
到這里,答案就很清楚了,由于我使用的是冷備份文件恢復的實例
在mysql庫中的slave_relay_log_info表中依然保留之前relay_log的信息,
所以導致啟動slave報錯。

———–如何解決————-
問題解決

通過上面的報錯以及relay log介紹,很容易知道由于mysql.slave_relay_log_info表中保留了以前的復制信息,導致新從庫啟動時無法找到對應文件,那么我們清理掉該表中的記錄不就可以了。再次提醒,不要手動刪該表數據,MySQL已經提供工具給我們了:reset slave:

reset slave干的那些事:

1、刪除slave_master_info ,slave_relay_log_info兩個表中數據;
2、刪除所有relay log文件,并重新創建新的relay log文件;
3、不會改變gtid_executed 或者 gtid_purged的值
下面解決問題:
dba:(none)> reset slave;
Query OK, 0 rows affected (0.00 sec)
dba:(none)> change master to ……
dba:(none)> start slave;
Query OK, 0 rows affected (0.00 sec)
——————————完成——————
 
9.查看同步狀態
mysql> show slave status\G  查看:
 
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

回到主庫 執行 UNLOCK TABLES;  解鎖

MariaDB [mysql]> show processlist;  
+——-+————-+———————+——–+————-+——+———————————————————————–+——————————————————————————————————+———-+
| Id    | User        | Host                | db     | Command     | Time | State                                                                 | Info                                                                                                 | Progress |
+——-+————-+———————+——–+————-+——+———————————————————————–+——————————————————————————————————+———-+
| 74658 | root        | localhost:40986     | mysql  | Query       |    0 | NULL                                                                  | show processlist                                                                                     |    0.000 |
| 75058 | testmysql   | 172.16.11.104:55109 | NULL   | Sleep       | 2104 |                                                                       | NULL                                                                                                 |    0.000 |
| 75059 | testmysql   | 172.16.11.104:55110 | test   | Sleep       | 1092 |                                                                       | NULL                                                                                                 |    0.000 |
| 75092 | testmysql   | 172.16.11.104:55134 | test   | Sleep       |    1 |                                                                       | NULL                                                                                                 |    0.000 |
| 75111 | testmysql   | 172.16.11.104:55152 | test   | Sleep       |  538 |                                                                       | NULL                                                                                                 |    0.000 |
| 75147 | testmysql   | 172.16.11.104:55190 | test12 | Sleep       | 2057 |                                                                       | NULL                                                                                                 |    0.000 |
| 75647 | system user |                     | NULL   | Connect     |  598 | Waiting for master to send event                                      | NULL                                                                                                 |    0.000 |
| 75648 | system user |                     | test   | Connect     |  310 | update                                                                | INSERT INTO `vote_record` VALUES (238905,’IkhiupqKi6rKeO99971A’,524,35,’2017-09-28 09:12:55′),(23890 |    0.000 |
| 75804 | replication | 172.30.100.25:36592 | NULL   | Binlog Dump |  136 | Master has sent all binlog to slave; waiting for binlog to be updated | NULL                                                                                                 |    0.000 |
+——-+————-+———————+——–+————-+——+———————————————————————–+——————————————————————————————————+———-+

 
好了,同步完成啦。

文章出自:CCIE那點事 http://www.qdxgqk.live/ 版權所有。本站文章除注明出處外,皆為作者原創文章,可自由引用,但請注明來源。 禁止全文轉載。
本文鏈接:http://www.qdxgqk.live/?p=3603轉載請注明轉自CCIE那點事
如果喜歡:點此訂閱本站
?
?
萌宠夺宝游戏 优易云商是真的赚钱吗 医院什么最赚钱 怎样看股票涨跌图 如何做一个股票分析师 国内股票指数 现在前20个最赚钱的行业排名 大蓬种植什么最赚钱 看点视频真的能赚钱吗 梦幻140炼药怎么赚钱 股票交易佣金 2016赚钱的直播公司 2012短线股票推荐 快手点击量能赚钱吗 西班牙做什么最赚钱? 梦幻西游l3赚不赚钱 装修哪个城市最赚钱