安裝Docker
查看Docker版本
docker version
查找想要的MySQL版本
https://hub.docker.com/u/library
這裡使用的是 **5.7.27**
安裝MySQL
docker pull mysql:5.7.27
創建一個自定義網橋mysql_bridge
docker network create --driver bridge mysql_bridge
運行主容器
docker run -itd --network mysql_bridge --name mysql_master1 -p 4306:3306 -e MYSQL_ROOT_PASSWORD=****** mysql:5.7.27
--name 容器名字
-p 指定容器的端口3306映射到主機的端口4306
-e 設置環境變量,這裡指定root賬號的密碼為******
-d 後臺運行容器,同時返回容器ID
mysql:5.7.27 指定MySQL的運行版本
檢查容器是否啟動
docker ps -a
STATUS為UP表示正在進行中
使用MySQL Workbench連接
創建主容器的複製賬號
CREATE USER replica IDENTIFIED BY '******';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%' IDENTIFIED BY '******';
SHOW GRANTS FOR 'replica'@'%' ;
修改MySQL配置環境
- 創建目錄
mkdir -p mysql/master1
mkdir -p mysql/slave1
mkdir -p mysql/slave2
- 拷貝MySQL配置文件
docker cp mysql_master1:/etc/mysql/mysql.conf.d/mysqld.cnf mysql/master1/mysqld.cnf
- 修改mysqld.cnf文件內容
#使 用 binary logging, mysql-bin是 log文 件 名 的 前 綴
log-bin=mysql-bin
#唯 一 服 務 器 ID,非 0整 數 ,不 能 與 和 其 他 服 務 器 的 server-id重 復
server-id=1
- 將修改後的mysqld.cnf文件覆蓋到docker中MySQL的配置文件中
docker cp mysql/master1/mysqld.cnf mysql_master1:/etc/mysql/mysql.conf.d/mysqld.cnf
重啟MySQL容器
docker restart mysql_master1
檢查日誌
docker logs mysql_master1 -f
運行MySQL從容器(mysql_slave1)
#1
docker run -itd --network mysql_bridge --name mysql_slave1 -p 4307:3306 -e MYSQL_ROOT_PASSWORD=****** mysql:5.7.27
同主容器一樣,拷貝一個mysqld.conf文件,並覆蓋到從容器中
#2
log-bin=mysql-bin
server-id=21
#3
修改完配置文件,覆蓋到從容器,重啟從容器
docker cp mysql/slave1/mysqld.cnf mysql_slave1:/etc/mysql/mysql.conf.d/mysqld.cnf
docker restart mysql_slave1
運行MySQL從容器(mysql_slave2)
#1
docker run -itd --network mysql_bridge --name mysql_slave2 -p 4308:3306 -e MYSQL_ROOT_PASSWORD=****** mysql:5.7.27
同主容器一樣,拷貝一個mysqld.conf文件,並覆蓋到從容器中
#2
log-bin=mysql-bin
server-id=22
#3
修改完配置文件,覆蓋到從容器,重啟從容器
docker cp mysql/slave1/mysqld.cnf mysql_slave2:/etc/mysql/mysql.conf.d/mysqld.cnf
docker restart mysql_slave2
配置主從複製
使用MySQLWorkbench連接mysql_slave1,執行以下SQL
CHANGE MASTER TO
MASTER_HOST='mysql_master1',
MASTER_PORT=3306,
MASTER_USER='replica',
MASTER_PASSWORD='******';
如果出現從實例複製log位置問題,添加如下SQL語句
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154,
START SLAVE;
改變複製SQL配置後需要重啟從配置
STOP SLAVE;
START SLAVE;
創建數據庫,主從複製不會創建數據庫,需要在主從實例上手動創建
CREATE DATABASE IF NOT EXISTS test CHARSET utf8mb4;
閱讀更多 碼向未來 的文章