docker安裝mysql5.6鏡像並進行主從配置

docker安裝mysql鏡像並進行主從配置

1.去DaoCloud官網(dockerhub可能因為網速問題下載的慢)查找需要的mysql版本鏡像

docker pull daocloud.io/library/mysql:5.6.20

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

#啟動主mysql
docker run --name mysql-master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d daocloud.io/library/mysql:5.6.20

解析:

  • –name 給容器取名字為mysql-master
  • -p 埠1:埠2 埠1是對外暴露的埠(即宿主機的埠),埠2 使我們的mysql埠
  • -e MYSQL_ROOT_PASSWORD=密碼 即root用戶的密碼
  • daocloud.io/library/mysql:5.6.20 代表後台運行我們的mysql

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

#啟動從mysql 改變埠號
docker run --name mysql-slave -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d daocloud.io/library/mysql:5.6.20

3.高級啟動(一般選擇這種方式)

#主節點啟動
docker run --name mysql-master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d -v /opt/docker/mysql/master/conf:/etc/mysql/  -v /opt/docker/mysql/master/data:/var/lib/mysql daocloud.io/library/mysql:5.6.20

解析:

  • -v /opt/docker/mysql/master/conf:/etc/mysql/ 代表將宿主機/opt/docker/mysql/master/conf 配置文件掛載到 mysql容器的/etc/mysql/下

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

    /opt/docker/mysql/master/data和/opt/docker/mysql/master/data 這量個目錄是我們虛擬機的地址,文件夾不用建,啟動成功自動生成

#從節點啟動
docker run --name mysql-slave -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d -v /opt/docker/mysql/slave/conf:/etc/mysql/  -v /opt/docker/mysql/slave/data:/var/lib/mysql daocloud.io/library/mysql:5.6.20

可以看到都正常啟動成功

4.進行主從配置

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

4.1編輯修改master上已經掛載到本地的my.cnf文件

(不配置的話使用mysql show master status;查看為空值)

vim /opt/docker/mysql/master/conf/my.cnf 
[mysqld]
log-bin=mysql-bin
server-id=1

解析:

  • log-bin配置項表示binlog的base name,產生的日誌文件名稱類似,mysql-bin.00001,mysql-bin.00002,mysql-bin.00003
  • server-id配置表示資料庫ID號, 為1時表示為master,其中master_id必須為1到232-1之間的一個正整數值,主從server-id不能一樣;

同理配置slave的my.cnf文件

[mysqld]
server-id=2
relay-log=relaylogs

4.2保存文件重啟mysql

#進入mysql容器內部
docker exec -it 主mysql的容器id bash
#登錄mysql
mysql -uroot -p123456

4.3授予用戶許可權

#這裡就採用的root用戶
GRANT REPLICATION SLAVE ON *.* TO 'root'@'%' identified by '123456';
FLUSH PRIVILEGES;
show grants for 'root'@'%';

4.3登錄從庫配置主庫的資訊

CHANGE MASTER TO MASTER_HOST='192.168.19.101',
MASTER_PORT=3306,
MASTER_USER='root',
MASTER_PASSWORD='123456', 
master_log_file = 'mysql-bin.000001', 
master_log_pos=0;

4.4查看是否配置成功

#開啟複製
start slave;
#查看複製有無成功
show slave status\G 

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

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

#在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的同步開啟了

參考:

MySql主從同步配置及實現

docker單節點部署mysql 5.6主從

mysql show master status為空值

Exit mobile version