1. 程式人生 > >mysql主從複製實現資料庫同步

mysql主從複製實現資料庫同步

1、Introduction

相信看過這篇文章的童鞋,都摩拳擦掌,躍躍一試了吧?

今天我們就來一次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

配置如下:

?

1

2

3

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,以使配置檔案生效。

?

1

sudo systemctl restart mysql

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

?

1

2

3

4

5

6

7

8

9

10

$ 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加入讀鎖,使其變為只讀。

?

1

2

mysql> FLUSH TABLES WITH READ LOCK;

Query OK, 0 rows affected (0.00 sec)

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

該資訊稍後會用到。

?

1

2

3

4

5

6

7

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中現有的資料資訊匯出

?

1

$ mysqldump -u root -p --all-databases --master-data > dbdump.sql

7、接觸master DB的讀鎖

?

1

mysql> UNLOCK TABLES;

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

?

1

scp dbdump.sql [email protected]:/home/ubuntu

slave機器上的操作

1、更改配置檔案

我們找到檔案 /etc/mysql/mysql.conf.d/mysqld.cnf

更改配置如下:

?

1

2

3

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,以使配置檔案生效

?

1

sudo systemctl restart mysql

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

?

1

$ mysql -u root -p < /home/ubuntu/dbdump.sql

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

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

$ 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同步了~