- 以下docker相關的命令,需要在root用戶環境下或通過sudo提升權限來進行操作。
1.拉取Mysql5.7.15鏡像到本地
docker pull mysql:5.7.15
# 如果只需要跑一個mysql實例,不做主從,那么執行以下命令即可,不用再做后面的參考步驟:
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -v ~/test/mysql/data:/var/lib/mysql mysql:5.7.15
# 然后用Shell或客戶端軟件通過配置(用戶名: root 密碼: 123456 IP:你的本機IP 端口:3306)來登陸
2. 准備MYSQL配置文件
-
mysql5.7.15安裝后的默認配置文件在/etc/mysql/my.cnf
-
自定義的配置文件一般在/etc/mysql/conf.d路徑下
-
創建/test/mysql/master/conf/my.cnf和/test/mysql/slave/conf/my.cnf 文件
-
用於配置主從:
~/test/mysql/master/conf/my.cnf
[mysqld]
server_id = 1
log-bin= mysql-bin
read-only=0
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
~/test/mysql/slave/conf/my.cnf
[mysqld]
server_id = 2
log-bin= mysql-bin
read-only=1
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
3.Docker分別運行Mysql 主/從兩個容器
- 將mysql主節點運行起來
mkdir -p ~/test/mysql/master/data
docker run --name mysql-master -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -v ~/test/mysql/master/data:/var/lib/mysql -v ~/test/mysql/master/conf/my.cnf:/etc/mysql/my.cnf mysql:5.7.15
- 運行參數說明
docker run -d
--name mysql-master // 容器的名稱設為mysql-master
-p 3307:3306 // 將host的3307端口映射到容器的3306端口
-v ~/test/mysql/master/conf/my.cnf:/etc/mysql/my.cnf //配置文件掛載
-v ~/test/mysql/master/data:/var/lib/mysql // mysql容器內數據掛載到host的/data/mysql/data_master,用於持久化
-e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.15 // mysql的root登陸密碼為123456
- 將mysql從節點運行起來
mkdir -p ~/test/mysql/slave/data
docker run --name mysql-slave -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 -v ~/test/mysql/slave/data:/var/lib/mysql -v ~/test/mysql/slave/conf/my.cnf:/etc/mysql/my.cnf mysql:5.7.15
4.登陸MYSQL主節點配置同步信息
- 登陸mysql
# 方式一:192.168.1.xx 是你本機的內網ip
mysql -u root -h 192.168.1.xx -P3307 -p123456
# 方式二:進入docker設置:
docker exec -it mysql-master bash
mysql -u root -p123456
- 在mysql client中執行
mysql > grant replication slave on *.* to 'slave'@'%' identified by '123456';
mysql > flush privileges;
- 獲取status
mysql> show master status\G;
*************************** 1. row ***************************
File: mysql-bin.000003
Position: 582
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
5.登陸MYSQL從節點配置同步信息
- 登陸mysql
# 192.168.1.xx 是你本機的內網ip
mysql -u root -h 192.168.1.xx -P3308 -p123456
- 在mysql client中執行
mysql > change master to master_host='192.168.1.xx',master_port=3307,master_user='slave',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=0;
mysql > start slave;
- 獲取status,得到類似如下的輸出:
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.xx
Master_User: slave
Master_Port: 3307
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 582
Relay_Log_File: 4254044df25b-relay-bin.000002
Relay_Log_Pos: 795
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...
- 可以嘗試在主mysql中新建數據庫里建表操作下,然后在從節點上檢查數據是否已經同步過來。