Mysql 主從同步實戰

子路發表於2017-04-10

1、Introduction

之前寫過一篇文章:Mysql主從同步的原理
相信看過這篇文章的童鞋,都摩拳擦掌,躍躍一試了吧?
今天我們就來一次mysql主從同步實戰!

2、環境說明

os:ubuntu16.04
mysql:5.7.17複製程式碼

下面的實戰演練,都是基於上面的環境。當然,其他環境也大同小異。

3、進入實戰

工具

2臺機器:

master IP:192.168.33.22
slave  IP:192.168.33.33複製程式碼

master機器上的操作

1、更改配置檔案

我們找到檔案 /etc/mysql/mysql.conf.d/mysqld.cnf
配置如下:

bind-address = 192.168.33.22 #your master ip
server-id = 1 #在master-slave架構中,每臺機器節點都需要有唯一的server-id
log_bin = /var/log/mysql/mysql-bin.log #開啟binlog複製程式碼

2、重啟mysql,以使配置檔案生效。

sudo systemctl restart mysql複製程式碼

3、建立主從同步的mysql user。

$ mysql -u root -p
Password:

##建立slave1使用者,並指定該使用者只能在主機192.168.33.33上登入。
mysql> CREATE USER 'slave1'@'192.168.33.33' IDENTIFIED BY 'slavepass';
Query OK, 0 rows affected (0.00 sec)

##為slave1賦予REPLICATION SLAVE許可權。
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'192.168.33.33';
Query OK, 0 rows affected (0.00 sec)複製程式碼

4、為MYSQL加讀鎖

為了主庫與從庫的資料保持一致,我們先為mysql加入讀鎖,使其變為只讀。

mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)複製程式碼

5、記錄下來MASTER REPLICATION LOG 的位置

該資訊稍後會用到。

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      613 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)複製程式碼

6、將master DB中現有的資料資訊匯出

$ mysqldump -u root -p --all-databases --master-data > dbdump.sql複製程式碼

7、接觸master DB的讀鎖

mysql> UNLOCK TABLES;複製程式碼

8、將步驟6中的dbdump.sql檔案copy到slave

scp dbdump.sql ubuntu@192.168.33.33:/home/ubuntu複製程式碼

slave機器上的操作

1、更改配置檔案

我們找到檔案 /etc/mysql/mysql.conf.d/mysqld.cnf
更改配置如下:

bind-address = 192.168.33.33 #your slave ip
server-id = 2 #master-slave結構中,唯一的server-id
log_bin = /var/log/mysql/mysql-bin.log #開啟binlog複製程式碼

2、重啟mysql,以使配置檔案生效

sudo systemctl restart mysql複製程式碼

3、匯入從master DB。 匯出的dbdump.sql檔案,以使master-slave資料一致

$ mysql -u root -p < /home/ubuntu/dbdump.sql複製程式碼

4、使slave與master建立連線,從而同步

$ mysql -u root -p
Password:

mysql> STOP SLAVE;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> CHANGE MASTER TO
    -> MASTER_HOST='192.168.33.22',
    -> MASTER_USER='slave1',
    -> MASTER_PASSWORD='slavepass',
    -> MASTER_LOG_FILE='mysql-bin.000001',
    -> MASTER_LOG_POS=613;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> START SLAVE;
Query OK, 0 rows affected (0.00 sec)複製程式碼

MASTER_LOG_FILE='mysql-bin.000001'MASTER_LOG_POS=613的值,是從上面的 SHOW MASTER STATUS 得到的。

經過如此設定之後,就可以進行master-slave同步了~

4、參考文章

HOW TO SETUP MYSQL 5.7 REPLICATION WITH MONITORING ON UBUNTU 16.04

更多精彩,請關注公眾號“聊聊程式碼”,讓我們一起聊聊“左手程式碼右手詩”的事兒。

Mysql 主從同步實戰

相關文章