Docker搭建MySQL8主從環境

1. 拉取mysql鏡像

# 沒加版本號默認最新版 latest
docker pull mysql

2. 建立掛載目錄

mkdir /home/docker/mysql/write
mkdir /home/docker/mysql/read

# 目錄權限設置
chmod 0777 /home/docker/mysql/write
chmod 0777 /home/docker/mysql/read

# write 新增mysql.cnf文件
[mysqld]
# 惟一id
server-id = 1
# 開啓logbin
log-bin = mysql-bin
# 默認端口
port = 3307

# read 新增mysql.cnf文件
[mysqld]
# 惟一id
server-id = 2
# 開啓logbin
log-bin = mysql-bin
# 默認端口
port = 3308

3. 建立容器

# docker run -d -v 宿主機掛載目錄:容器文件目錄 --name 容器名稱 -p 宿主機端口:映射鏡像端口 -e 參數=值 鏡像名稱
# 三種模式都可,這裏是建立讀跟寫兩個數據庫

# 默認網絡鏈接模式
docker run -d -v /home/docker/mysql/write:/etc/mysql/conf.d --name write_mysql -p 3307:3307 -e MYSQL_ROOT_PASSWORD=root mysql
docker run -d -v /home/docker/mysql/read:/etc/mysql/conf.d --name read_mysql -p 3308:3308 -e MYSQL_ROOT_PASSWORD=root mysql

# 指定網卡、IP運行
docker run -d -v /home/docker/mysql/write:/etc/mysql/conf.d --name write_mysql -p 3307:3307 -e MYSQL_ROOT_PASSWORD=root --network=docker0 --ip 172.17.0.2 mysql
docker run -d -v /home/docker/mysql/read:/etc/mysql/conf.d --name read_mysql -p 3308:3308 -e MYSQL_ROOT_PASSWORD=root --network=docker0 --ip 172.17.0.3 mysql

# 使用host模式運行(宿主機網段爲172開頭時建議使用該模式,能夠避免因宿主機與docker默認網段相同致使的沒法訪問容器的問題)
docker run -d -v /home/docker/mysql/write:/etc/mysql/conf.d --name write_mysql -e MYSQL_ROOT_PASSWORD=root --network=host mysql
docker run -d -v /home/docker/mysql/read:/etc/mysql/conf.d --name read_mysql -e MYSQL_ROOT_PASSWORD=root --network=host mysql

4. 進入容器,登陸MySQL

# docker exec -it 容器名稱 bash

# 分別登錄讀、寫庫
docker exec -it write_mysql bash
docker exec -it read_mysql bash

mysql -uroot -proot

5. 更改帳戶加密方式

# 'localhost'爲本地, ‘%’ 爲外部
# 將加密方式設置爲 ‘mysql_native_password’ 能夠防止外部登錄時報 'sha2xxxx' 錯誤
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
FLUSH PRIVILEGES;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
FLUSH PRIVILEGES;

6. 查看主機狀態

show master status;

# 注:需記錄主機File與Positon

7. 從機配置

# 若是有啓動從機則須要先中止
# stop slave;

# 修改主機信息
change master to master_host='主機IP',master_port=主機端口,master_user='帳戶',master_password='密碼',master_log_file='主機File',master_log_pos=主機Positon;

8. 啓動從機

# 啓動
start slave;

# 查看狀態
show slave status\G

# 這兩個配置爲: Yes, 表示配置成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

9. 遠程訪問權限

use mysql;
grant all on *.* to 'root'@'%' with grant option;
flush privileges;
相關文章
相關標籤/搜索