如果你在docker已经有了mysql容器的话,我们就可以直接搭建我们的第二个mysql了,也就是slave
输入命令找到mysql镜像
#查看自己存在的镜像名字
docker images
#构建容器: run 运行 --name 自定义名字 -d 后台运行 -p指定端口 + 镜像名字
docker run --name mysql002 -d -p 3307:3306 springcloudv20_mysql
接下来去sqlyog测试连接:发现报错说密码不正确或者没有远程权限
解决如下:
进入刚刚构建的容器里:
#查看所有的容器(包括不在运行的)
docker ps -a
#进入刚刚安装的mysql容器
docker exec -it f953908ce539 /bin/bash f953908ce539 是刚刚查看容器的id
#输入命令进行mysql
mysql -uroot -p 然后回车
#使用mysql数据库
use mysql;
#修改密码
update user set password=password('123456') where user='root' and host='localhost';
#允许远程访问
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
#重载授权表:
FLUSH PRIVILEGES;
然后就可以测试成功了,其实我们也可以构建容器的时候直接设置密码:
#注意主从两个数据库版本须一致
docker run -p 3307:3306 --name mymysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
开始配置主从互备了:
这里我的 主为 3306:3306 从为:3307:3306
在两个数据库分别建一个数据库名为:repl
1.首先配置主(Master):
#进入主mysql容器
docker exec -it f953908ce539 /bin/bash f953908ce539 为容器ID
vi /etc/my.cnf (如果说命令没用则需下载vim命令 使用apt-get install vim 命令安装vim )
在最后一行填入以下命令:
## 同一局域网内注意要唯一
server-id=1
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
配置完成后退出重启mysql : service mysql restart
docker start f953908ce539 启动容器
然后进入容器再进入mysql:
在Master数据库创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。
#分别执行这两行命令
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
2.再配置从(Slave):
和配置Master(主)一样,在Slave配置文件my.cnf中添加如下配置:
## 设置server_id,注意要唯一
server-id=101
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
配置完成后也需要重启mysql服务和docker容器,操作和配置Master(主)一致。
3.第三步就是连接主从了
在Master进入mysql,执行
#查看主的状态
show master status;
注意: 这里的File 和 Position待会配置从会用到的,建议先截图
以上都成功记得别去动主数据库的东西,不然会有意想不到的惊喜!!!
#########################以上为主数据库###########################
进入从的数据库:
执行以下命令:
#
change master to master_host='192.168.83.115', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos= 238, master_connect_retry=30;
master_host:容器IP
master_user: 用于数据同步的用户
master_password: 用于同步的用户的密码
master_port : Master的端口号,指的是容器的端口号
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
最后在从mysql里输入 start slave
# 开启主从复制过程
start slave
#查询主从同步状态
show slave status \G;
有这两个YES就代表你配置成功了,接下来就可以去从数据库添加数据测试了。
提示: 如果你不是两个YES,这个地方会有报错信息,方便你快速排错: