Docker快速部署mysql主从数据库
2022/1/30 2:06:33
本文主要是介绍Docker快速部署mysql主从数据库,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
主从数据库
安装docker
请参考我的另外一个文章:
https://blog.csdn.net/m0_46435741/article/details/121502952
新建主mysql容器实例
创建mysql版本为5.7的容器。
挂载数据卷:
配置文件挂载到主机目录:/mydata/mysql-master/conf
日志文件挂载到主机目录:/mydata/mysql-master/log
数据文件挂载到主机目录:/mydata/mysql-master/data
对外端口3307映射到容器3306端口
docker run -p 3307:3306 --name mysql-master \ -v /mydata/mysql-master/log:/var/log/mysql \ -v /mydata/mysql-master/data:/var/lib/mysql \ -v /mydata/mysql-master/conf:/etc/mysql \ -e MYSQL_ROOT_PASSWORD=root \ -d mysql:5.7
修改主mysql配置文件
进入配置目录
cd /mydata/mysql-master/conf
新建并编辑配置文件
vim my.cnf
将如下代码复制到配置文件中
[mysqld] ## 设置server_id,同一局域网中需要唯一 server_id=101 ## 指定不需要同步的数据库名称 binlog-ignore-db=mysql ## 开启二进制日志功能 log-bin=mall-mysql-bin ## 设置二进制日志使用内存大小(事务) binlog_cache_size=1M ## 设置使用的二进制日志格式(mixed,statement,row) binlog_format=mixed ## 二进制日志过期清理时间。默认值为0,表示不自动清理。 expire_logs_days=7 ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。 ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 slave_skip_errors=1062
esc后键入 : wq 保存
重启容器实例
docker restart mysql-master
进入容器实例操作主mysql
docker exec -it mysql-master /bin/bash
进入MySQL操作界面
mysql -uroot -proot
主容器中创建数据同步用户
create user 'slave'@'%' identified by '123456'
grant replication slave,replication client on *.* to 'slave'@'%'
新建从mysql容器实例
创建mysql版本为5.7的容器。
挂载数据卷:
配置文件挂载到主机目录:/mydata/mysql-slave/conf
日志文件挂载到主机目录:/mydata/mysql-slave/log
数据文件挂载到主机目录:/mydata/mysql-slave/data
对外端口3308映射到容器3306端口
docker run -p 3308:3306 --name mysql-slave \ -v /mydata/mysql-slave/log:/var/log/mysql \ -v /mydata/mysql-slave/data:/var/lib/mysql \ -v /mydata/mysql-slave/conf:/etc/mysql \ -e MYSQL_ROOT_PASSWORD=root \ -d mysql:5.7
修改从mysql配置文件
进入配置目录
cd /mydata/mysql-slave/conf
新建并编辑配置文件
vim my.cnf
将如下代码复制到配置文件中
[mysqld] ## 设置server_id,同一局域网中需要唯一 server_id=102 ## 指定不需要同步的数据库名称 binlog-ignore-db=mysql ## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用 log-bin=mall-mysql-slave1-bin ## 设置二进制日志使用内存大小(事务) binlog_cache_size=1M ## 设置使用的二进制日志格式(mixed,statement,row) binlog_format=mixed ## 二进制日志过期清理时间。默认值为0,表示不自动清理。 expire_logs_days=7 ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。 ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 slave_skip_errors=1062 ## relay_log配置中继日志 relay_log=mall-mysql-relay-bin ## log_slave_updates表示slave将复制事件写进自己的二进制日志 log_slave_updates=1 ## slave设置为只读(具有super权限的用户除外) read_only=1
esc后键入 : wq 保存
重启从mysql容器实例
docker restart mysql-slave
进入从容器实例
docker exec -it mysql-slave /bin/bash
进入MySQL控制台
mysql -uroot -proot
查看主从同步状态
show slave status \G;
同步未开始
详细参数说明
master_host:主数据库的IP地址;
master_port:主数据库的运行端口;
master_user:在主数据库创建的用于同步数据的用户账号;
master_password:在主数据库创建的用于同步数据的用户密码;
master_log_file:指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数;
master_log_pos:指定从数据库从哪个位置开始复制数据,通过查看主数据的状态,获取Position参数;
master_connect_retry:连接失败重试的时间间隔,单位为秒。
配置主从复制基本信息
MySQL控制台输入:
change master to master_host='宿主机ip', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos=617, master_connect_retry=30;
(如果是虚拟机,可以填写虚拟机的ip,我的是192.168.98.129,如果是云主机,那么就是云主机的ip)
开启主从同步
start slave;
再次查看查看主从同步状态
show slave status \G;
同步已经开始
tip:两次exit推出mysql控制台和docker容器
主从测试
主数据库新建库—>使用库—>新建表—>插入数据
到从数据库中
进入容器—>调出从数据库控制台—>使用库—>查看记录
如果发现数据同步,代表主从配置成功!!
给从数据库新建一个只读角色(可省)
根据项目需求,可能有主从两个数据库,一个负责读,一个负责写,当然,主数据库一定是执行写的操作,读也可以执行,而从数据库只能执行读的操作,不能写,一旦使用root执行写的操作,会破坏主从数据库的数据一致性
所以,我们给从数据库建立一个新的用户
进入从数据库
docker exec -it mysql-slave /bin/bash
打开mysql控制台
mysql -uroot -proot
创建用户slave,密码为123456 (根据实际需求更改):
create user 'slave'@'%' identified by '123456';
仅仅授予slave用户select权限:
grant select on *.* to 'slave'@'%';
刷新数据库:
flush privileges;
查看用户是否创建成功:
select host,user from mysql.user;
利用navicat连接主从数据库
主数据库:
从数据库:
如果你创建过只读用户,那么我建议你直接用该用户连接,避免主从不一致。
如果你仅仅用于测试和查看,也可用root用户登录,请注意不要修改从数据库的数据
这篇关于Docker快速部署mysql主从数据库的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-16MySQL资料:新手入门教程
- 2024-11-16MySQL资料:新手入门教程
- 2024-11-15MySQL教程:初学者必备的MySQL数据库入门指南
- 2024-11-15MySQL教程:初学者必看的MySQL入门指南
- 2024-11-04部署MySQL集群项目实战:新手入门教程
- 2024-11-04如何部署MySQL集群资料:新手入门指南
- 2024-11-02MySQL集群项目实战:新手入门指南
- 2024-11-02初学者指南:部署MySQL集群资料
- 2024-11-01部署MySQL集群教程:新手入门指南
- 2024-11-01如何部署MySQL集群:新手入门教程