首頁  >  文章  >  資料庫  >  詳解Mysql主從同步配置範例程式碼

詳解Mysql主從同步配置範例程式碼

黄舟
黄舟原創
2017-03-16 14:00:581056瀏覽

這篇文章主要介紹了詳解Mysql主從同步實戰,實例分析了Mysql主從同步的原理和實現,非常具有實用價值,需要的朋友可以參考下。

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=&#39;192.168.33.22&#39;,
 -> MASTER_USER=&#39;slave1&#39;,
 -> MASTER_PASSWORD=&#39;slavepass&#39;,
 -> MASTER_LOG_FILE=&#39;mysql-bin.000001&#39;,
 -> 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同步了~

以上是詳解Mysql主從同步配置範例程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn