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-()-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主從資料庫組就搭建完成。