一、拉取mysql镜像
docker pull mysql:5.7
二、创建文件docker.cnf
我采用的方式,是使用虚拟机,搭建docker环境,在Docker李新建了两个数据库,端口分别为3307和3308。其中3307为模拟master,3308为模拟slave。
2.1 mysql主机(192.168.21.55:3307)
2.1.1 创建文件夹
原教程方式是这样
mkdir /usr/local/mysql
cd mysql/
mkdir conf data
我的实现方式是这样,直接合并了第一步,直接通过docker构建,相较于他的操作,更为简单粗暴。
docker run -p 3307:3306 --name mysql_3308 -v /root/mysql/mysql_3308/conf:/etc/mysql/conf.d -v /root/mysql/mysql_3308/logs:/logs -v /root/mysql/mysql_3308/data:/var/lib/mysql -v /etc/localtime:/etc/localtime -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 --lower_case_table_names=1
2.1.2 创建docker.cnf
vim /usr/local/mysql/conf/docker.cnf
具体添加:
[mysqld]
server-id=1
log-bin=master-bin #只是读写,就只要主库配置即可.如果要做主从切换,那么主库和从库都需要开启.
skip-host-cache
skip-name-resolve
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
[mysql]
default-character-set=utf8
[client]
default-character-set=utf8
2.2 mysql从机(192.168.21.55:3308)
2.2.1 创建文件夹
mkdir /usr/local/mysql
cd mysql/
mkdir conf data
2.2.2 创建docker.cnf
vim /usr/local/mysql/conf/docker.cnf
具体添加:
[mysqld]
server-id=2
log-bin=master-bin
skip-host-cache
skip-name-resolve
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
[mysql]
default-character-set=utf8
[client]
default-character-set=utf8
三、创建容器并运行
3.1 放行端口号
此步操作,我并没有放行,因为本地虚拟机环境端口号都是开放的。
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
3.2 mysql主机
docker run --name mysqlmaster -p 3307:3306 -v /usr/local/mysql/conf:/etc/mysql/conf.d -v /usr/local/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --privileged=true -d mysql:5.7
3.3 mysql从机
docker run --name mysqlslave -p 3308:3306 -v /usr/local/mysql/conf:/etc/mysql/conf.d -v /usr/local/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --privileged=true -d mysql:5.7
四、开启主从复制
4.1 mysql主机
进入Mysql容器:
docker exec -it mysqlmaster /bin/bash
启动mysql
mysql -uroot -proot
创建用户
create user 'lhl'@'%' identified by 'root';
权限
grant replication slave on *.* to 'lhl'@'%';
刷新权限
flush privileges;
查看状态
show master status;
4.2 mysql从机
进入mysql容器
docker exec -it mysqlslave /bin/bash
启动mysql
mysql -uroot -proot
执行主从
change master to master_host='192.168.21.55',master_port=3307,master_user='lhl',master_password='root',master_log_file='master-bin.000003',master_log_pos=745;
如果报错,执行下面命令并再次执行上面的命令
stop slave;
开启复制
start slave;
查看主从是否成功
show slave status \G;
以下两个都为yes就代表成功了!!!!
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
说明主从成功
PS:若直接按其教程走,应该是没有问题,能够直接成功的!感谢原文博主的分享!