Docker安装Mysql和配置主从复制

968 阅读2分钟

拉取mysql:5.7镜像到本地

docker pull mysql:5.7

docker images # 查看是否拉取成功

这是系统内一个正常的可数据持久化存储的文件夹
cd /home #进入到home目录
mkdir docker #创建docker文件夹,存放后续所有要在docker中启动项目
cd docker
mkdir mysql #创建mysql文件夹,存放在docker中启动mysql时需要用到文件
cd mysql
mkdir master slave

在master文件夹下新建文件my.cnf

cd master
vi my.cnf

然后写入以下内容:

[mysqld]
server-id=1
log-bin = mysql-bin
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=information_schema
max_connections=1024
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

在slave文件夹下新建文件my.cnf

cd ../slave # 返回上级并进入slave目录
vi my.cnf

然后写入以下内容:

[mysqld]
server-id=2
max_connections=1024
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

id要修改成不一致的

配置文件挂载到容器

docker mysql主从复制

cd ../ # 返回到mysql目录
docker run -p 3315:3306 --restart always --name mysqlmaster -v $PWD/master:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
docker run -p 3316:3306 --restart always --name mysqlslave -v $PWD/slave:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7


配置主从之前需要关闭防火墙或者把主节点端口号开放出来

永久开放主节点端口的命令:
	参考文章
	https://blog.csdn.net/zx110503/article/details/78787483
	
	firewall-cmd --get-active-zones #运行完成之后,可以看到zone名称
	firewall-cmd --zone=public --add-port=3315/tcp --permanent #永久开发端口的命令
	firewall-cmd --reload # 重启防火墙
	firewall-cmd --query-port=3315/tcp #查看是否开启成功
	

然后就可用navicat等可视化工具连接mysql进行下一步的操作

下一步在Master数据库创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,
用于在主从库之间同步数据。

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';

在Master进入mysql,执行show master status;
File和Position字段的值后面将会用到,在后面的操作完成之前,需要保证Master库不能做任何操作,
否则将会引起状态变化,File和Position字段的值变化

在slave节点输入以下命令,把它连到master节点:
change master to master_host='192.168.1.97',
master_port=3315,
master_user='slave',
master_password='123456',
master_log_file='mysql-bin.000003',
master_log_pos=696;

开启复制状态

start slave

查看是否成功

show slave status