Mysql主庫有數據,從庫從新初始化數據流程

方案一:主從數據必須一致 


=======================================================================Mysql主庫有數據,從庫從新初始化數據流程============================================================================
0、停止應用,mysql主庫全庫備份
1、停止從庫複製進程
	stop slave ;
2、鎖定主數據庫,只允許讀取不允許寫入,這樣做的目的是防止備份過程中或備份完成之後有新數據插入,導致備份數據和主數據數據不一致。主庫鎖表(將所有的髒頁都要刷新到磁盤,然後對所有的表加上了讀鎖)
	flush tables with read lock;
3、查詢主數據庫狀態,並記下FILE及Position的值
	show master status;
4、備份主庫數據
	mysqldump  aqzx           -usystem -p'XXX'  >    aqzx.sql     
	mysqldump  yhzx           -usystem -p'XXX'  >    yhzx.sql 
	mysqldump  confcenter     -usystem -p'XXX'  >    confcenter.sql 
	mysqldump  lhywzx         -usystem -p'XXX'  >    lhywzx.sql 
	mysqldump  aqzx           -usystem -p'XXX'  >    aqzx.sql 	
5、將主庫數據導入從庫數據庫 保持主從數據一致
	drop database aqzx;
	create database aqzx;  
	mysql  aqzx        -usystem -p'XXX'  <   aqzx.sql          
6、從庫配置
	change master to master_host='172.17.0.2',
	 master_user='slave',
	 master_password='XXX',
	 master_port=3306,
	 master_log_file='mysql-bin.XXXX',
	 master_log_pos= 4952,
	 master_connect_retry=30;  
7、啓動主從複製start slave;,此時查看從庫狀態show slave status \G;,若是SlaveIORunning 和 SlaveSQLRunning 都是Yes,說明開啓主從複製過程成功。
8、解鎖主數據庫 切換回主數據庫的終端,進行表解鎖操作。
	unlock tables;
9、測試主從複製
總結:是對主庫的數據進行備份,然後將主數據庫中導出的數據導入到從數據庫,然後再開啓主從複製,以此來保證主從數據庫數據一致。

方案二:必須一致,最簡單方法

還有一種方法:
slave-skip-errors = 1062
重啓mysql服務

方案三:主鍵衝突後的沒有進入從庫的數據可以不要

從庫
stop slave;
reset slave;
主庫
reset master;
show master status;
+------------------+----------+---------------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB        | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+---------------------+------------------+-------------------+
| mysql-bin.000023 |      506 | Hoboson,Hoboson0316 | mysql            |                   |
+------------------+----------+---------------------+------------------+-------------------+
從庫	
	change master to master_host='192.168.2.81',
	 master_user='slave',
	 master_password='123456',
	 master_port=3306,
	 master_log_file='mysql-bin.000001',
	 master_log_pos= 154,
	 master_connect_retry=30;  
	 start slave;
	 show slave status\G;
	 *************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.2.81
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 30
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 154
               Relay_Log_File: k8s82-master-relay-bin.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

主庫數據:select * from tb_dept;
+----+-----------------+-----------------+
| Id | Name            | description     |
+----+-----------------+-----------------+
|  1 | 研發部          | 研發部          |
|  2 | 人事部          | 人事部          |
|  3 | 考勤簿          | 考勤簿          |
|  4 | 遊戲俱樂部      | 遊戲俱樂部      |
|  5 | KTV             | KTV             |
|  6 | 軍事基地        | 軍事基地        |
|  7 | 軍事基地        | 軍事基地        |
|  8 | 軍事基地        | 軍事基地        |
|  9 | 飯堂            | 飯堂            |
| 10 | 圖書館          | 圖書館          |
| 11 | 圖書館1         | 圖書館1         |
| 12 | 圖書館2         | 圖書館2         |
| 13 | 圖書館3         | 圖書館3         |
| 14 | 圖書館4         | 圖書館4         |
| 15 | 圖書館5         | 圖書館5         |
| 16 | 圖書館6         | 圖書館6         |
+----+-----------------+-----------------+
從庫數據:select * from tb_dept;
 +----+-----------------+-----------------+
| Id | Name            | description     |
+----+-----------------+-----------------+
|  1 | 研發部          | 研發部          |
|  2 | 人事部          | 人事部          |
|  3 | 考勤簿          | 考勤簿          |
|  4 | 遊戲俱樂部      | 遊戲俱樂部      |
|  5 | KTV             | KTV             |
|  6 | 軍事基地        | 軍事基地        |
|  7 | 軍事基地        | 軍事基地        |
|  8 | 軍事基地        | 軍事基地        |
|  9 | 飯堂            | 飯堂            |
| 10 | 圖書館          | 圖書館          |
| 16 | 圖書館6         | 圖書館6         |
+----+-----------------+-----------------+
圖書館1-5丟失 但是後面的數據可以正常使用,對數據一致性要求不高可以使用

方法四:

將主從不一致的的數據庫或者表使用mysqldump 導出 mysql導入

有可能有主鍵衝突,然後結合方案二處理

測試腳本:

create table tb_dept(
     Id int primary key auto_increment,#部門編號 整形 主鍵 自增長
     Name varchar(18),#部門名稱
     description varchar(100)#描述
 );

INSERT INTO `tb_dept`(`Id`, `Name`, `description`) VALUES (111, '研發部', '研發部');
INSERT INTO `tb_dept`(`Id`, `Name`, `description`) VALUES (112, '人事部', '人事部');
INSERT INTO `tb_dept`(`Id`, `Name`, `description`) VALUES (113, '考勤簿', '考勤簿');
INSERT INTO `tb_dept`(`Id`, `Name`, `description`) VALUES (114, '遊戲俱樂部', '遊戲俱樂部');
INSERT INTO `tb_dept`(`Id`, `Name`, `description`) VALUES (115, 'KTV', 'KTV');
INSERT INTO `tb_dept`(`Id`, `Name`, `description`) VALUES (116, '軍事基地', '軍事基地');
INSERT INTO `tb_dept`(`Id`, `Name`, `description`) VALUES (117, '軍事基地', '軍事基地');
INSERT INTO `tb_dept`(`Id`, `Name`, `description`) VALUES (118, '軍事基地', '軍事基地');
INSERT INTO `tb_dept`(`Id`, `Name`, `description`) VALUES (119, '飯堂', '飯堂');

跨服務器數據導入:

mysqldump --host=h1 -uroot -proot --databases db1 |mysql --host=h2 -uroot -proot db2
將h1服務器中的db1數據庫的所有數據導入到h2中的db2數據庫中,db2的數據庫必須存在否則會報錯

mysqldump --host=192.168.80.137 -uroot -proot -C --databases test |mysql --host=192.168.80.133 -uroot -proot test 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章