1.docker安装MySQL
1.1 启动docker
systemctl start docker
1.2 从仓库中查询mysq
docker search mysql
1.3 下载mysql镜像
docker pull docker.io/mysqld
查询镜像是否下载成功
docker image ls
1.4 运行docker 容器(container, 主服务器(master))
docker run -itd --name=mysql_master -p 3310:3306 -e MYSQL_ROOT_PASSWORD=123 docker.io/mysql
1.5 查询mysql进程是否启动
docker ps
1.6 运行从(slave)容器
docker run -itd --name=mysql_slave -p 3311:3306 -e MYSQL_ROOT_PASSWORD=123 docker.io/mysql
1.7 查看启动的container
docker ps
1.8使用navicat( 图形化工具)测试
2.配置主(master)服务器
2.1 进入master服务器容器内
docker exec -it mysql_master /bin/bash
2.2 进入/etc/mysql文件夹
cd etc/
cd mysql
ls
显示如下文件
conf.d my.cnf my.cnf.fallback
2.3 使用vi/vim编辑my.cnf文件
vi my.cnf
因为vi没有安装,所以显示如下提示
- 此时执行 apt-get update
apt-get update
- 执行apt-get install vim 安装vim
apt-get install vim
- 使用vi编辑 my.cnf
vi my.cnf
- 在my.cnf添加代码如下(使用“i” 键进入编辑模式)
server-id:唯一编号
- 编辑完成后按Esc 输入 :wq 之后回车保存
- 出现如下界面,按回车继续
- 重新启动容器让配置生效
docker restart mysql_master
2.4 创建专用账户(slave)进行主从同步
- 使用root账户登入mysql
docker exec -it mysql_master /bin/bash
mysql -u root -p
输入密码
- 创建专用同步账户(slave)
//创建slave账户,并初始化密码
CREATE USER 'slave'@'%' IDENTIFIED BY '123';
//给账户slave授权,REPLICATION SLAVE 常用于建立复制时所需要用到的用户权限
//REPLICATION CLIENT 不可用于建立复制,有该权限时,只是多了可以使用如"SHOW SLAVE STATUS"、"SHOW MASTER STATUS"等命令。
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'%';
//使权限生效
flush privileges;
3.配置从(slave)容器
3.1 进入slave服务器容器内
docker exec -it mysql_slave /bin/bash
3.2 进入/etc/mysql文件夹
cd etc/mysql
ls
3.3 使用vi/vim编辑my.cnf文件
apt-get update
apt-get install vim
vi my.conf
修改如下图
4.主(master)从(Slave)复制
4.1 查看master状态
- 进入master容器
docker exec -it mysql_master /bin/bash
mysql -u slave -p
- 显示主服务器状态
show master status;
记住主服务器状态
4.2 在slave中执行命令
- 查询master容器的独立IP
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql_master // mysql_master--master容器的名称
记住IP地址
- 进入slave容器中
docker exec -it mysql_slave /bin/bash
mysql -u root -p
- 执行SQL语句
change master to master_host='172.17.0.2',//独立IP地址
master_user='slave', //数据同步用户
master_password='123', //数据同步用户密码
MASTER_LOG_FILE='mysql-bin.000001',//主服务器状态
MASTER_LOG_POS=1327;//主服务器端口号
- 开启主从复制过程
start slave;
show slave status \G;
出现如下界面,框选内容都为YES,及配置成功。否则看下面问题所在与解决方案
- 图形化界面检测主从配置成功
5.问题及解决方案
- error connecting to master ‘slave@172.17.0.2:3306’ - retry-time: 60 retries: 2 message:
Authentication plugin ‘caching_sha2_password’ reported error: Authentication requires
secure connection.
解决方案:
在master服务器修改用户密码信息
ALTER USER ‘slave’@’%’ IDENTIFIED WITH mysql_native_password BY ‘123’;
FLUSH PRIVILEGES;
解锁表
unlock tables
- Slave failed to initialize relay log info structure from the repository, Error_code: 1872
解决方案:
在slave服务器进行如下操作:
关闭slave服务器
stop slave; //关闭slave
重置slave
reset slave;//重置slave
重新运行change master to :确保配置内容无错
change master to master_host='172.17.0.2',
master_user='slave',
master_password='123',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=1327;
启动slave容器
start slave;