站长之家源码下载,上海十大管理咨询公司,wordpress调用子分类,wordpress图片双击放大01-主从复制原理
MySQL主从复制是一种用于实现数据备份、读写分离和扩展性的技术。它基于二进制日志#xff08;Binary Log#xff09;来将主数据库上的更改操作同步到一个或多个从数据库。 MySQL主从复制的基本原理如下#xff1a;
主服务器#xff08;Master#xff0…01-主从复制原理
MySQL主从复制是一种用于实现数据备份、读写分离和扩展性的技术。它基于二进制日志Binary Log来将主数据库上的更改操作同步到一个或多个从数据库。 MySQL主从复制的基本原理如下
主服务器Master记录二进制日志主服务器记录所有对数据库的修改操作包括更新、插入和删除等并将这些操作记录在二进制日志中。从服务器Slave连接到主服务器从服务器通过配置文件指定主服务器的地址和认证信息然后与主服务器建立连接。从服务器请求复制数据从服务器向主服务器发送复制请求请求成为主服务器的一个从服务器。主服务器接受复制请求主服务器接受从服务器的复制请求并将相关的复制信息记录到主服务器的二进制日志中。从服务器获取并应用复制数据从服务器连接到主服务器后开始从主服务器的二进制日志中获取复制数据并将这些数据应用到自己的数据库中实现数据的同步。周期性地重复复制过程从服务器会周期性地检查主服务器的二进制日志获取新的复制数据并应用到自己的数据库中以保持与主服务器的数据同步。
主从复制可以实现以下功能
数据备份和恢复通过主从复制从服务器作为备份可以随时恢复到主服务器的数据状态。读写分离主服务器负责处理写操作从服务器负责处理读操作从而分担了主服务器的负载。高可用性如果主服务器发生故障可以快速切换到从服务器保证系统的高可用性。
02-主从复制实战
2-1 主服务器设置
主服务容器的部署工作大体分为以下 5 步
新建主服务器容器实例 3307进入/root/mysql/conf 目录下新建my.cnf修改完配置重启主容器实例进入主容器主容器实例内创建数据同步用户
首先依旧得部署数据卷具体流程工作如下
mkdir -p /root/mysql/conf
mkdir -p /root/mysql/log
mkdir -p /root/mysql/data
docker run -d -p 3307:3306 --privilegedtrue -v /root/mysql/log:/var/log/mysql -v /root/mysql/data:/var/lib/mysql -v /root/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD8888 --name mysql mysql:5.7然后在/root/mysql/conf下编辑文件my.cnf将如下内容写入后重启主容器
[mysqld]
## 设置serverid,同一局域网中需要唯一
server_id101
## 指定不需要同步的数据库名称
binlog-ignore-dbmysql
##开启二进制日志功能
log-binmall-mysql-bin
##设置二进制日志使用内存大小(事务)
binlog_cache_size1M
##设置使用的二进制日志格式(mixed,statement,row)
binlog_formatmixed
## 二进制日志过期清理时间按默认为0表示不自动清理
expire_logs_days7
## 跳过主从复制中遇到的所有错误或指定类型的错误避免从slave端复制中断
## 1062错误是指一些主键重复1032错误是因为主从数据库不一致
slave_skip_errors1062然后我们需要在主容器内创建数据同步用户创作用户代码如下
#首先链接mysql服务器
mysql -uroot -p
# 代码将创建一个名为replication_user的用户并授予其在所有数据库和表上进行复制操作的权限。
CREATE USER replication_user% IDENTIFIED BY password;
GRANT REPLICATION SLAVE ON *.* TO replication_user%;
# 执行以上SQL语句后刷新MySQL权限以使更改生效
FLUSH PRIVILEGES;将password替换为实际的密码。建议使用强密码来保护用户账号。%表示该用户可以从任意主机连接到MySQL服务器。如果您只希望特定IP地址或主机名可以连接请相应地修改连接限制。
2-3 从服务器设置
从服务容器的部署工作大体分为以下 5 步
新建从服务器容器实例 3307进入/root/mysql-salve/conf 目录下新建my.cnf修改完配置重启从容器实例进入从容器在主数据库中查看主从数据同步状态
首先依旧得部署数据卷具体流程工作如下
mkdir -p /root/mysql-slave/cnf
mkdir -p /root/mysql-slave/log
mkdir -p /root/mysql-slave/data
docker run -d -p 3308:3306 --privilegedtrue -v /root/mysql-slave/log:/var/log/mysql -v /root/mysql-slave/data:/var/lib/mysql -v /root/mysql-slave/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD8888 --name mysql-2 mysql:5.7然后在/root/mysql-slave/conf下编辑文件my.cnf将如下内容写入后重启从 容器
[mysqld]
## 设置serverid,同一局域网中需要唯一,主机101从机202
server_id102
## 指定不需要同步的数据库名称
binlog-ignore-dbmysql
##开启二进制日志功能
log-binmall-mysql-bin
##设置二进制日志使用内存大小(事务)
binlog_cache_size1M
##设置使用的二进制日志格式(mixed,statement,row)
binlog_formatmixed
## 二进制日志过期清理时间按默认为0表示不自动清理
expire_logs_days7
## 跳过主从复制中遇到的所有错误或指定类型的错误避免从slave端复制中断
## 1062错误是指一些主键重复1032错误是因为主从数据库不一致
slave_skip_errors1062
## relay_log配置中继日志
relay_logmall-mysql-relay-bin
##log_slave_updates表示slave讲复制时间写进自己的二进制日志
log_slave_updates1
## slave设置为只读(具有super用户权限除外)
read_only1然后我们可以在主数据库中查看目前的主从同步状态
继而进入mysql-slave容器中开始在从数据库中配置主从复制。
CHANGE MASTER TO MASTER_HOST主服务器IP地址,MASTER_USER主服务器复制用户,MASTER_PASSWORD主服务器复制用户密码,MASTER_PORT主服务器端口,MASTER_LOG_FILE主服务器二进制日志文件,MASTER_LOG_POS主服务器日志位置;实际操作中需要注意更多的东西比如我的实际操作内容是
CHANGE MASTER TO MASTER_HOST192.168.254.128,MASTER_USERslave,MASTER_PASSWORDking1977,MASTER_PORT3307,MASTER_LOG_FILEmall-mysgl-bin.000001,MASTER_LOG_POS749,MASTER_CONNECT_RETRY30;然后我们需要在从数据中查看主从同步状态**show slave status \G;**此时可以看到主从状态并未开启我们需要开启主从同步状态。
在从数据库中开启主从数据同步命令如下
start slave;
# 然后重新检查主从同步状态如果两个状态未同时为YES可以执行以下内容
# 在备库执行
stop slave;
reset slave;
start slave;03-主从复制测试
主服务器上创建新的数据库和数据表输入内容如下
create database db_01;
use db_01;
crate table tb_01(id int,name varchar(20));此时主服务器和从服务器数据库内容如下 主服务器数据库 从服务器数据库 至此一主一从的主从复制顺利完成在后续的学习实战中我想要实现一主多从的自动化部署这点后续可以作为学习的重点。