当前位置:网站首页>Ubuntu基于docker的mysql主从数据库配置
Ubuntu基于docker的mysql主从数据库配置
2022-07-26 23:27:00 【小白阿远】
1、主从数据库原理
读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),
而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从
数据库(此处依赖组从复制).
2、读写分离的原因
数据库写入效率要低于读取效率,一般系统中数据读取频率高于写入频率,单个数据库实例在写入的时候会影响读取性能,
这是做读写分离的原因.
什么时候用读写分离
数据库不一定要读写分离,如果程序使用数据库,更新多,而查询少的情况下不会考虑使用。利用数据库主从同步,再
通过读写分离可以分担数据库压力,提高查询及写入性能。
3、实现机制
MySQL服务器之间的主从同步是基于`二进制日志机制`,主服务器使用二进制日志来记录数据库的变动情况
从服务器通过读取和执行该日志文件来保持和主服务器的数据一致

下边我在我的电脑上给大家实现一下,仅供参考
一: 拉取MYSQL镜像
docker pull mysql:latest这里可能出现的错误就是没有权限,当提示无权限的时候我们需要在命令最前边加上sudo(是否加sudo要视具体情况而定)

我们只需静静等待即可
二:创建主动mysql容器的本地文件夹
a、文件夹用于存放配置文件以及数据库数据
mkdir mysql_master
mkdir mysql_slave
b、在对应的文件夹中,创建配置文件以及数据库文件
进入主数据文件夹 cd mysql_master
mkdir data
mkdir mysql.conf.d
进入从数据文件夹 cd mysql_slave
mkdir data
mkdir mysql.conf.d
c、创建配置文件
进入对应的mysql.conf.d文件夹中,创建配置文件
touch mysqld.cnf
三:配置文件内容
a、主机配置 vi mysqld.cnf
[mysqld]
## 同一局域网内注意要唯一
server-id=100
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
b、从机配置 vi mysqld.cnf
[mysqld]
## 设置server_id,注意要唯一
server-id=101
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin
注意在配置文件中的代码要顶格写例如:

四:创建对应的docker容器
#1.启动master
sudo docker run -d --name mysql-master -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /home/mysql_master/data:/var/lib/mysql -v /home/mysql_master/mysql.conf.d:/etc/mysql/conf.d mysql
#2.启动slave
sudo docker run -d --name mysql-slave -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /home/mysql_slave/data:/var/lib/mysql -v /home/mysql_slave/mysql.conf.d:/etc/mysql/conf.d mysql
注意点:映射文件夹路径必须写绝对路径
映射端口不要出现冲突
当出现以下报错信息时,我们可以检查创建docker时的文件映射路径是否和自己创建的文件路径有差别,也有可能是我们创建的文件夹的名字可能有重复,我们也可以尝试换一个文件夹的名字来解决报错

五:配置master主库
进入到主数据库中
docker exec -it mysql-master bash# 登陆到主机(进入到容器之后直接使用myql命令)
mysql -u xxx -p xxx
# 创建从机账号
CREATE USER slave IDENTIFIED BY 'slave';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
GRANT ALL PRIVILEGES ON *.* TO 'slave'@'%' ;
# 刷新权限
FLUSH PRIVILEGES;
# 查看二进制日志信息, 记录 文件名 和 偏移量, 后面会用到
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000007 | 722 | | | |
+------------------+----------+--------------+------------------+-------------------+
六:配置slave从库
# 进入到容器内
docker exec -it mysql-slave bash# 登陆到从机(进入到容器之后直接使用myql命令)
mysql -u xxx -p xxx
# 从机连接到主机
$ change master to master_host='xx.xx.xx.xx', master_port=3307, master_user='slave', master_password='slave',master_log_file='mysql-bin.000003', master_log_pos=4337;
# 停止从机服务
$ stop slave;
# 开启从机服务
$ start slave;
以上配置完毕之后可以测试一下:
在主库中创建一个表,然后进入到从库中检查是否生成相同的表,如果生成则代表,主从数据库配置一切正常,反之,我们可以通过 docker logs mysql来查看MySQL的日志,以此来确定是哪一部份出现了问题
边栏推荐
- Solve every bit of an integer
- Full company mGRE and star topology mGRE
- LeetCode->二分查找打卡(三)
- OSPF summary (mind map)
- Solve prime numbers between 100 and 200
- Hcip OSPF comprehensive experiment
- 进程的调度
- The latest JD SMS login + silly girl robot nanny level deployment tutorial (July 24, 2022)
- 【洋哥带你玩转线性表(一)——顺序表】
- 项目时区问题解决
猜你喜欢
随机推荐
Handsomeforum Learning Forum
JVM interview questions (necessary for interview)
从单表到分表实现数据平滑迁移
[Fibonacci sequence and spiral are based on C language]
Record the star user of handsomeblog
Little sister's notes: how do I learn simple source code to expand my horizons
NAT网络地址转换协议-拓扑实验
线程和进程
图书馆和档案馆的职能
关于序列化变量保存的坑,加了索引器的数据不能序列化
The pointer is really profound!!!
HCIP-第三天-广域网拓扑实验
【斐波那契数列及螺线 基于C语言】
中断、信号、系统调用
静态路由实验配置
想要彻底搞的性能优化,得先从底层逻辑开始了解~
C语言 学生信息管理系统 基于数组 可以存取到文本文件
Northeast Securities stock online account, is it safe to open an account on your mobile phone
Qt中文乱码常量换行符终极解决方案
[brother Yang takes you to play with the linear table (I) - sequence table]









