MySQL5.7不停機不鎖表主從同步實戰


准備工作

環境

虛擬機201 1核 1G IP:192.168.0.201

虛擬機202 1核 1G IP:192.168.0.202 克隆自201,需要修改ip地址和MySQL server UUIDs

201防火牆對202開啟3306端口

  1.  
    # 在201上執行
  2.  
    [root@192.168.0.201 ~] # firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.202" port protocol="tcp" port="3306" accept"
  3.  
    復制代碼

修改MySQL server UUIDs

由於202這台服務器是從201克隆過來的,所有他們的MySQL server UUIDS是一樣的,我們需要重新生成一個

Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

  1.  
    #修改202上面的uuid
  2.  
     
  3.  
    mv /db/mysql/auto.cnf /db/mysql/auto.cnf.back
  4.  
    service mysqld restart
  5.  
    復制代碼

一、Master服務器201配置文件

  1.  
    basedir = /usr/ local/mysql
  2.  
    datadir = /db/mysql
  3.  
    port = 3306
  4.  
    server_id = 201
  5.  
    socket = /tmp/mysql.sock
  6.  
    log-error = /data/log/mysql/mysql.log
  7.  
    pid-file = /db/mysql/mysqld.pid
  8.  
     
  9.  
    innodb_buffer_pool_size = 268435456
  10.  
    innodb_log_file_size = 64M
  11.  
     
  12.  
    log-bin=/db/binlog/mysql-bin
  13.  
    binlog-do-db=timophp
  14.  
    binlog-do-db=timosns
  15.  
    復制代碼

log-error(mysql錯誤日志存放路徑)

  1.  
    mkdir /data/ log/mysql
  2.  
    touch /data/ log/mysql/mysql.log
  3.  
    chown mysql:mysql /data/ log/mysql/mysql.log
  4.  
    復制代碼

log-bin

  1.  
    log-bin是設置binlog日志的位置並開啟binlog日志的記錄
  2.  
    mkdir /db/binlog
  3.  
    chown mysql:mysql /db/binlog
  4.  
    復制代碼

binlog-do-db和binlog-ignore-db說明

binlog-do-db 需要記錄binlog日志的數據庫

binlog-ignore-db 不需要記錄binlog日志的數據庫

兩個是對立的,一般只使用其中一個就可以了,如果數據庫多,我們可以使用binlog-ignore-db來忽略其中幾個,其它沒被忽略的就會記錄binlog日志

二、Slave從服務器202配置文件

  1.  
    basedir = /usr/ local/mysql
  2.  
    datadir = /db/mysql
  3.  
    port = 3306
  4.  
    server_id = 202
  5.  
    socket = /tmp/mysql.sock
  6.  
    log-error = /data/log/mysql/mysql.log
  7.  
    pid-file = /db/mysql/mysqld.pid
  8.  
    復制代碼

replicate-do-db和replicate-ignore-db說明

replicate-do-db 需要復制的數據庫名,如果復制多個數據庫,重復設置這個選項即可

replicate-ignore-db 不需要復制的數據庫,如果多個請重復設置這個選項即可

三、重啟主、從MySQL服務

service mysqld restart

四、在主MySQL服務器操作

1)​創建復制​用戶並授權

mysql> grant replication slave on *.* to 'syncslave'@'%' identified by '27OP3B0R9@C?4ex>';

說明:創建syncslave用戶並分配replication slave權限(可以show grants;來查看權限​),用戶名可以隨機生成一個字符串。密碼是27OP3B0R9@C?4ex>,可以隨機生成一個字符串

mysql> flush privileges;

說明:刷新權限表

五、備份Master數據再同步

1)導出數據(在主庫上執行)

  1.  
    [root@192.168.0.201 ~] # mysqldump -uroot -p123456 --flush-logs --single-transaction --master-data=2 timophp > /data/sql/timophp.sql
  2.  
    復制代碼

說明:

--skip-lock-tables 不鎖表

--master-data=2 在導出的時候同時生成binlog文件名和位置在導出的文件開頭。這個很重要。因此第4步也不需要執行了,binlog的文件和位置可以從這里拿到。

--single-transaction 通過將導出操作封裝在一個事務內來使得導出的數據是一個一致性快照

打包壓縮

[root@192.168.0.201 ~]# tar -zcf /data/sql/timophp.sql /data/sql/timophp.sql.tar.gz

復制到從庫

[root@192.168.0.201 ~]# scp /data/sql/timophp.sql.tar.gz root@192.168.0.202:/data/sql/timophp.sql.tar.gz

六、在從數據庫上操作

1)解壓

[root@192.168.0.202 ~]# tar -zxf /data/sql/timophp.sql.tar.gz

2)導入主庫數據

[root@192.168.0.202 ~]# mysql -uroot -p timophp < /data/sql/timophp.sql

3)配置slave同步參數

mysql> change master to master_host='192.168.1.201',master_user='syncslave',master_password='27OP3B0R9@C?4ex>',master_log_file='mysql-bin.000010',master_log_pos=154;

說明:master_log_file和master_log_pos請看sql文件頂部有

4)啟動slave同步功能​

mysql> start slave;

5)查看salve同步狀態​

mysql>show slave status\G;

說明:Slave_IO_Running: Connecting表示正在鏈接Master,正常應該是Yes,這里是因為我Master沒啟動,Slave_SQL_Running: Yes,正常,保證這兩個都是Yes

如果是為NO 執行:

mysql>stop slave

mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

mysql>START SLAVE;

在進行查看。

轉載於:https://juejin.im/post/5c063dbc51882528c4469496


免責聲明!

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



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