Docker安装mysql镜像并进行主从配置

Docker安装mysql镜像并进行主从配置

1.下载需要的mysql版本镜像

docker pull mysql:5.6

2.启动mysql服务实例(基本启动)

#启动主mysql
docker run --name mysql-master -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6

解析:

  • --name 容器名 给容器取名字为mysql-master
  • -p 端口1:端口2 端口1是对外暴露的端口(即宿主机的端口),端口2 是mysql端口
  • -e MYSQL_ROOT_PASSWORD=密码 即root用户的密码
  • -d mysql:5.6 代表后台运行我们的mysql

注意:(此方式的缺点:容器关闭再启动我们的数据就没有了)

#启动从mysql 改变端口号
docker run --name mysql-slave -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6

3.进行主从配置&&挂载启动

MySQL5.6开始主从复制有两种方式:基于日志(binlog);基于GTID(全局事务标示符)。此文章是基于日志方式的配置步骤。

image-20210917221908090

创建文件夹

mkdir /home/docker/mysql/master/conf/
vim my.cnf 

主mysql的my.cnf配置文件

[mysqld]
#主数据库端ID号(为1时表示为master,其中master_id必须为1到232-1之间的一个正整数值,主从server-id不能一样)
server_id = 1           
#开启二进制日志                  
log-bin = mysql-bin                             

同理配置slave的my.cnf文件

[mysqld]
server-id=2
relay-log=relaylogs
3.1挂载启动(一般选择这种方式)
#主节点启动
docker run --name mysql-master -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -d -v /home/docker/mysql/master/conf/my.cnf:/etc/mysql/my.cnf  -v /home/docker/mysql/master/data:/var/lib/mysql mysql:5.6

解析:

  • -v /home/docker/mysql/master/conf/my.cnf:/etc/mysql/my.cnf 代表将宿主机/home/docker/mysql/master/conf/my.cnf 配置文件挂载到 mysql容器的/etc/mysql/my.cnf下

  • -v /home/docker/mysql/master/data:/var/lib/mysql 代表将宿主机/home/docker/mysql/master/data 配置文件挂载到 mysql容器的/var/lib/mysql下

#从节点启动
docker run --name mysql-slave -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 -d -v /home/docker/mysql/slave/conf/my.cnf:/etc/mysql/my.cnf  -v /home/docker/mysql/slave/data:/var/lib/mysql mysql:5.6

可以看到容器mysql-master和mysql-slave已经启动成功!

image-20210917212648943

3.2保存文件重启mysql,进入主库
#进入mysql容器内部
docker exec -it 主mysql的容器id bash
#登录mysql
mysql -uroot -p123456
3.3授予用户权限
#这里就采用的root用户
GRANT REPLICATION SLAVE ON *.* TO 'root'@'%' identified by '123456';
FLUSH PRIVILEGES;
show grants for 'root'@'%';
3.4登录从库配置主库的信息
# 内网地址
CHANGE MASTER TO MASTER_HOST='172.18.242.24',MASTER_PORT=3307,MASTER_USER='root',MASTER_PASSWORD='123456',master_log_file = 'mysql-bin.000001',master_log_pos=0;
3.5查看是否配置成功
#开启复制
start slave;
#查看复制有无成功
show slave status\G 

可以看到配置成功( 当看到Slave_IO_Running: YES、Slave_SQL_Running: YES才表明状态正常)

image-20210917215134280

下面测试一下是否开启同步

#在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的同步开启了

image-20210917215517507

参考:

相关文章

最近一直在开发Apworks框架的案例代码,同时也在一起修复Apw...
最近每天都在空闲时间努力编写Apworks框架的案例代码WeText。...
在《Kubernetes中分布式存储Rook-Ceph部署快速演练》文章中,...
最近在项目中有涉及到Kubernetes的分布式存储部分的内容,也...
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.ne...
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.ne...