Docker安裝mysql映象並進行主從配置

無_憂 發表於 2021-09-17
MySQL Docker

Docker安裝mysql映象並進行主從配置

1.下載需要的mysql版本映象

docker pull mysql:5.6

2.啟動mysql服務例項(基本啟動)

#啟動主mysql
docker run --name mysql-master -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6

解析:

  • --name 容器名 給容器取名字為mysql-master
  • -p 埠1:埠2 埠1是對外暴露的埠(即宿主機的埠),埠2 是mysql埠
  • -e MYSQL_ROOT_PASSWORD=密碼 即root使用者的密碼
  • -d mysql:5.6 代表後臺執行我們的mysql

注意:(此方式的缺點:容器關閉再啟動我們的資料就沒有了)

#啟動從mysql 改變埠號
docker run --name mysql-slave -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6

3.進行主從配置&&掛載啟動

MySQL5.6開始主從複製有兩種方式:基於日誌(binlog);基於GTID(全域性事務標示符)。此文章是基於日誌方式的配置步驟。

image-20210917221908090

建立資料夾

mkdir /home/docker/mysql/master/conf/
vim my.cnf 

主mysql的my.cnf配置檔案

[mysqld]
#主資料庫端ID號(為1時表示為master,其中master_id必須為1到232-1之間的一個正整數值,主從server-id不能一樣)
server_id = 1           
#開啟二進位制日誌                  
log-bin = mysql-bin                             

同理配置slave的my.cnf檔案

[mysqld]
server-id=2
relay-log=relaylogs
3.1掛載啟動(一般選擇這種方式)
#主節點啟動
docker run --name mysql-master -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d -v /home/docker/mysql/master/conf/my.cnf:/etc/mysql/my.cnf  -v /home/docker/mysql/master/data:/var/lib/mysql mysql:5.6

解析:

  • -v /home/docker/mysql/master/conf/my.cnf:/etc/mysql/my.cnf 代表將宿主機/home/docker/mysql/master/conf/my.cnf 配置檔案掛載到 mysql容器的/etc/mysql/my.cnf下

  • -v /home/docker/mysql/master/data:/var/lib/mysql 代表將宿主機/home/docker/mysql/master/data 配置檔案掛載到 mysql容器的/var/lib/mysql下

#從節點啟動
docker run --name mysql-slave -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 -d -v /home/docker/mysql/slave/conf/my.cnf:/etc/mysql/my.cnf  -v /home/docker/mysql/slave/data:/var/lib/mysql mysql:5.6

可以看到容器mysql-master和mysql-slave已經啟動成功!

image-20210917212648943

3.2儲存檔案重啟mysql,進入主庫
#進入mysql容器內部
docker exec -it 主mysql的容器id bash
#登入mysql
mysql -uroot -p123456
3.3授予使用者許可權
#這裡就採用的root使用者
GRANT REPLICATION SLAVE ON *.* TO 'root'@'%' identified by '123456';
FLUSH PRIVILEGES;
show grants for 'root'@'%';
3.4登入從庫配置主庫的資訊
# 內網地址
CHANGE MASTER TO MASTER_HOST='172.18.242.24', 
MASTER_PORT=3307,
MASTER_USER='root',
MASTER_PASSWORD='123456', 
master_log_file = 'mysql-bin.000001', 
master_log_pos=0;
3.5檢視是否配置成功
#開啟複製
start slave;
#檢視複製有無成功
show slave status\G 

可以看到配置成功( 當看到Slave_IO_Running: YES、Slave_SQL_Running: YES才表明狀態正常)

image-20210917215134280

下面測試一下是否開啟同步

#在master中建立一個資料庫
create database mytest default character set utf8;
#在mytest資料庫中建立一個表
create table student(`name` varchar(64) not null,`age` int(11) not null) default charset utf8;

可以看到slave的同步開啟了

image-20210917215517507

參考: