「MySQL」 利用Docker實現MySQL一主多從

「MySQL」 利用Docker實現MySQL一主多從

安裝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

「MySQL」 利用Docker實現MySQL一主多從

​STATUS為UP表示正在進行中

使用MySQL Workbench連接

「MySQL」 利用Docker實現MySQL一主多從

創建主容器的複製賬號

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;


分享到:


相關文章: