1. 程式人生 > >docker部署mysql主從

docker部署mysql主從

 本文在使用docker的方式,在同一臺主機,通過不容容器執行MySQL的方式,搭建了一主一從的MySQL主從資料庫組。後續將使用consul搭建高可用的MySQL資料庫,使用MyCat實現分庫分表,讀寫分離,從而搭建一個穩定的,易於擴充套件的,高可用的資料庫組。

  • 獲取msyql映象

通過docker pull mysql:5.7獲取mysql的官方映象,mysql版本是5.7。

  •  部署master

1. 建立檔案master.cnf。server-id取值為1-(2^{32})-1,在同一個主從的MySQL組中,server-id必須是唯一的。

[mysqld]
log-bin=mysql-bin
server-id=1

2. 建立master的docker容器啟動指令碼,容器名稱為master,root密碼為123456,設定timezone為Asia/Shanghai,對映配置檔案master.cnf,並且將mysql的容器路徑/var/lib/mysql對映的主機的/path/to/data路徑實現MySQL資料的持久化。

#!/bin/bash
docker run -p 3306:3306 \
--name master \
-v /path/to/master.cnf:/etc/mysql/conf.d/master.cnf:ro \
-v /path/to/data:/var/lib/mysql \
-v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro \
-v /path/to/timezone:/etc/timezone:ro \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7

 3. 執行指令碼啟動master,使用docker exec -it master /bin/bash進入到docker容易。執行命令mysql -u root -p,通過啟動時設定的root密碼登陸MySQL。可以通過以下語句修改root密碼

update mysql.user set authentication_string=password('123qwe') where user='root' and Host = 'localhost';

 4. 建立使用者並授與replication slave許可權。

CREATE USER 'dev'@'%.example.com' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'dev'@'%.example.com';

5. 使用show master status查詢master的binlog的檔名和position。

SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 73       | test         | manual,mysql     |
+------------------+----------+--------------+------------------+
  • 部署slave

1. 建立檔案slave.cnf,設定與master不同的server-id。binlog_ingore_*是忽略某個資料庫。

[mysqld]
log-bin=mysql-bin
binlog-format=ROW 
server_id=2
binlog_ignore_db=mysql
binlog_ignore_db=information_schema
binlog_ignore_db=performation_schema
binlog_ignore_db=sys

2. 建立slave的容器啟動指令碼,與master不同的是配置檔案和持久化資料的位置不同。啟動slave時通過--link連線到master,使slave能夠通過master的主機名訪問master。

#!/bin/bash
docker run -p 3306:3306 \
--name slave1 \
--link master \
-v /path/to/slave.cnf:/etc/mysql/conf.d/slave.cnf:ro \
-v /path/to/mysql/data1:/var/lib/mysql \
-v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro \
-v /path/to/timezone:/etc/timezone:ro \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7

 3. 配置master的連線資訊,是slave能夠連線到master。通過docker exec -it slave1 /bin/bash法進入到slave的容器中,登入mysql執行語句

CHANGE MASTER TO
     MASTER_HOST='master',
     MASTER_USER='dev',
     MASTER_PORT=3306,
     MASTER_PASSWORD='password',
     MASTER_LOG_FILE='mysql-bin.000003',
     MASTER_LOG_POS=73;

4. 在slave中執行start slave啟動slave執行緒。

至此,兩個節點的組成的mysql主從資料庫組就搭建完成。