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