mysql主從同步詳細教程


1、安裝好主數據庫和從數據庫,這個大家肯定都會,如果不是很明白,可以參考我前面的安裝教程。

例子:

  假如我需要同步test1、test2數據庫 

 

  系統:centos7

  主庫主機:192.168.1.252 

  從庫主機:192.168.1.251   

  端口都是:3306

2、主數據庫基本配置

  (1)、打開主數據的配置文件my.cnf,添加這幾項

server_id = 1                #唯一標識,主庫從庫不能重復
log_bin = mysql-bin          #開啟日志
binlog_format=MIXED         #日志記錄的格式
max_binlog_size = 512M     #單個日志文件最大
expire_logs_day = 3          #日志有效期(天)
binlog_do_db = test1,test2    #日志記錄那些數據庫
binlog_ignore_db = mysql,performance_schema,information_schema #日志記錄忽略那些數據庫的
(2)、重啟mysql (service mysql restart)
(3)、在主庫創建一個用於同步的用戶(當然也可以不創建,直接用已有的,不過為了安全建議還是創建一個)
 grant replication slave on *.* to 'slave'@'192.168.1.253' identified by '123456';

  這個slave用戶密碼為123456,但有同步的權限,且只能在192.168.1.253上連接。

  如果主庫里已經數據庫數據了,那還得進行以下操作:

    刷新表然后鎖表(只允許查數據不允許寫數據):

flush tables with read lock;

    然后備份要同步的數據庫的數據,然后拷貝到從庫里面

mysqldump -uroot -p test1>test1.sql;
mysqldump -uroot -p test2>test2.sql;
#從庫要先創建數據庫test1和test2,然后導入數據
mysql -uroot -p test1<test1.sql;
mysql -uroot -p test1<test2.sql;

  主庫執行:show master status; 記下 Position 和 File 的值,等下進行從庫配置要用到。

  +------------------+----------+--------------+------------------+
  | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  +------------------+----------+--------------+------------------+
  | mysql-bin.000023 | 2720 | test1,test2 | mysql 
  +------------------+----------+--------------+------------------+

3、從庫配置信息

  (1)、修改配置文件my.cnf

server_id = 2
log_bin = mysql-bin	    #開啟日志
binlog_format=MIXED	    #日志記錄的格式
max_binlog_size = 512M     #單個日志文件最大
expire_logs_day = 3	   #日志有效期(天)
replicate_do_db = test1,test2 #是在slave上配置,指定slave要復制哪個庫
replicate-ignore-db=mysql,performance_schema,information_schema #是在slave上配置,指定slave要忽略哪個庫
relay_log_recovery = 1     #從庫建議開啟,有利於數據一致性
log_slave_updates = 1      #如果從庫還會用做主庫,建議開啟

  (2)、重啟從庫,執行如下命令(先停止同步,然后設置同步信息,master_log_file 和 master_log_pos就是我們主庫上面的)

stop slave;
change master to
master_host='192.168.1.252',
master_user='slave',
master_password='123456',
master_port=3306,
master_log_file='mysql-bin.000023', 
master_log_pos=2720;
slave start;

  (3)、從庫執行:show slave status\G; 查看是否正常

   主要看這幾項;

lave_IO_Running: Yes
Slave_SQL_Running: Yes
Master_Log_File: mysql-bin.000023
Relay_Master_Log_File: mysql-bin.000023
Read_Master_Log_Pos: 2720
Exec_master_log_pos: 2720

4、最后回到主庫解鎖表 

unlock tables;

5、主從不同步了解決辦法

方法一:忽略錯誤后,繼續同步
  該方法適用於主從庫數據相差不大,或者要求數據可以不完全統一的情況,數據要求不嚴格的情況
  解決:
    stop slave; #表示跳過一步錯誤,后面的數字可變
    set global sql_slave_skip_counter =1;
    start slave;
  之后再用mysql> show slave status\G 查看:
  Slave_IO_Running: Yes
  Slave_SQL_Running: Yes

方式二:重新做主從,完全同步
  該方法適用於主從庫數據相差較大,或者要求數據完全統一的情況
  解決步驟如下:
    1.先進入主庫,進行鎖表,防止數據寫入
    使用命令:
    mysql> flush tables with read lock;
    注意:該處是鎖定為只讀狀態,語句不區分大小寫
    2.進行數據備份
      #把數據備份到mysql.bak.sql文件
      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 |
      +-------------------+----------+--------------+-------------------------------+

    4.把mysql備份文件傳到從庫機器,進行數據恢復
      #使用scp命令
      [root@server01 mysql]# scp mysql.bak.sql root@192.168.128.101:/tmp/
    5.停止從庫的狀態
      mysql> stop slave;
    6.然后到從庫執行mysql命令,導入數據備份
      mysql> source /tmp/mysql.bak.sql
    7.設置從庫同步,注意該處的同步點,就是主庫show master status信息里的| File| Position兩項
      change master to master_host = '192.168.128.100', master_user = 'rsync', master_port=3306, master_password='', master_log_file = 'mysqld-bin.000001', master_log_pos=3260;
    8.重新開啟從同步
      mysql> start slave;
    9.查看同步狀態
      mysql> show slave status\G 查看:
      Slave_IO_Running: Yes
      Slave_SQL_Running: Yes

           10.主庫解鎖

    mysql> unlock tables;

 

6、pt-table-checksum 和 pt-table-sync

  這個兩個軟件也是很方便,大家可以去了解一下  

  pt-table-checksum:在主(master)上通過執行校驗的查詢對復制的一致性進行檢查,對比主從的校驗值,從而產生結果。DSN指向的是主的地址,該工具的退出狀態不為零,如果發現有任何差別,或者如果出現任何警告或錯誤,更多信息請查看官方資料。
  pt-table-sync: 高效的同步MySQL表之間的數據,他可以做單向和雙向同步的表數據。他可以同步單個表,也可以同步整個庫。它不同步表結構、索引、或任何其他模式對象。所以在修復一致性之前需要保證他們表存在。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM