Mysql数据库主从同步详解

Mysql数据库设置主从同步

MySQL数据库的主从复制是一种常见的数据备份和高可用性解决方案。通过配置主从复制,可以实现将数据从一个MySQL服务器(主服务器)同步到另一个(从服务器)。

前言

mysql数据库的主从同步设置需要修改主库和从库的配置文件,并执行同步指令,步骤并不复杂。但是在部署过程中还是遇到一些问题,找了很久好像没人遇到相同的问题,因此将部署流程与遇到的问题分享出来,希望遇到同样问题时有参考依据。

1.主库(主服务器)配置

1.1修改主库配置文件,启用二进制日志

数据库配置文件所在目录:
CentOS7安装mysql后,配置文件默认路径为:/etc/my.cnf
Windows安装mysql后,配置文件默认路径为:C:\ProgramData\MySQL\MySQL Server 5.7
本次安装的主服务器CentOS7中,因此需要进入到/ect目录下,修改my.cnf配置文件:

#进入etc目录下
cd /etc
#编辑mysql配置文件
vi my.cnf

在配置文件[mysqld]最后一行,添加以下内容:

#mysql主库配置
server_id = 88               #集群唯一标识,主库从库不能重复(值为数据库IP)
log_bin = mysql-bin          #开启二进制日志
expire_logs_days = 7         #日志有效期(天)

请添加图片描述
内容说明:
#集群唯一标识,主库从库不能重复,建议值取数据库IP,避免重复(该项必须配置)
server_id = 88
#开启mysql二进制日志(该项必须配置)
log_bin = mysql-bin
#设置同步日志有效期(天),到期自动清理,避免磁盘占用空间过大(该项建议配置)
expire_logs_days = 7

1.2重启数据库服务

Mysql数据库修改my.cnf配置文件后,需要重启数据库才能使修改的配置文件生效:

systemctl restart mysqld

重启数据库后,可以查看数据库的运行状态,确保数据库正常运行(active):

systemctl status mysqld

在这里插入图片描述

1.3创建远程连接账户

从库同步主库的数据,那么从库需要先连接到主库。初始的root账户只能在主库服务器中登录,在从库所在服务器中使用该账户是无法登录的,因此需要创建一个远程连接的账户:
登录数据库:mysql -uroot -p数据库密码
在Windows中直接通过命令行登录到mysql,需要将mysql添加到环境变量。
本次创建一个远程连接账户’slave’,密码为’test’(可以根据自己需要创建不同的账户密码),赋予账户只有复制权限:

方法一(分步执行):

创建mysql账户:

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

%表示账户开通远程连接,允许所有IP通过该账户登录数据库。

授权该账户只有复制的权限:

GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';

REPLICATION SLAVE 表示仅给该账户复制的权限,*.*表示可以该账户的权限对所有的数据库和数据表都有效,可以复制所有数据库和表,%表示所有IP都可以通过该账户连接到数据库。

刷新权限:

flush privileges; 

方法二(合并执行):

创建一个账户只有复制权限(slave),权限对所有数据库和表生效(*.*),‘slave’账号,密码为’test’:

grant replication slave on *.* to 'slave'@'%' identified by 'test';

1.4查看master状态,记录二进制文件名(File)和位置(Position):

复制主机的数据库,需要先查询主机数据库二进制日志的文件名和文件所在位置的,命令如下:

SHOW MASTER STATUS;

在这里插入图片描述

1.5停止主机数据库的写操作

注意:从机开始同步之前,主机不能再进行写操作,如果主机仍在进行写操作,会导致同步失败,导致同步无法继续执行。
因此,建议在执行同步之前,先把所有连接到mysql数据库的jar、tomcat、中间件、exe程序全部停止,停止程序往主机继续写入数据,同步时确保数据的一致性。

2.从库(从机)配置

2.1修改从库配置文件

本次从机安装在Windows系统中,需要进入mysql的配置文件目录下,修改配置文件
C:\ProgramData\MySQL\MySQL Server 5.7\my.ini
{如果从机安装在CentOS7下,则需要修改/etc/my.cnf配置文件,添加以下内容}
在这里插入图片描述
简单的配置只需要需改从机的id即可完成。修改server-id,改成与主机不冲突的值(建议取从机的IP,避免冲突)。
进阶配置如下图所示:
在这里插入图片描述

#mysql从机配置
#从机唯一标识,与主库不能重复(值取IP地址)
server-id=66
#设置日志保存时长
expire_logs_days=7
#数据库宕机后自动恢复日志,从库建议开启,有利于数据一致性
relay_log_recovery=1

2.2重启从机Mysql服务

本次从机安装在Windows系统中,安装Mysql后会出现在系统服务中。修改配置文件后,需要重启系统服务才能适用新的改动:
在这里插入图片描述

如果从机安装在CentOS7下,则通过命令重启Mysql:

systemctl restart mysqld

2.3导入数据库

注意:如果已停止所有程序对数据库的写入操作,则可以直接将数据库全部同步过来,无需创建导入数据库,此步骤可忽略进入下一步。直接看下一个步骤:2.4开始主从同步。

由于本次同步时,未停止程序对数据库写入操作,导致在使用中的数据库无法同步到从机中,因此需要手动导入数据库。虽然设置了主从同步,但是如果主库未停止写入,从库并不会将主机在使用中的数据库直接同步复制到从机。因此必须先将主机的数据库导出,再导入到从机的数据库中。从机先创建数据库,新创建的数据库名字、字符集、排序规则必须和主库原有的数据库相同。然后再执行下一步。
在这里插入图片描述
数据库创建好后,将主机中导出的数据库导入到从机中:
在这里插入图片描述

2.4开始主从同步

重启Mysql后,可以设置从机的数据库同步到主机。设置同步到的主机信息(连接的IP和账户),执行从机执行同步命令。

登录从机数据库:mysql -uroot -p数据库密码

登录成功后,在从机数据库命令行执行以下指令,设置主机的连接参数。使从机可以连接到主机:

change master to master_host='主机IP',master_user='数据库账户',master_password='数据库密码',master_log_file='数据库二进制文件',master_log_pos=文件位置参数;

从机连接到主机后,开始同步,从机复制主机的二进制日志:

start slave;

在这里插入图片描述

2.5查看从机状态

注意:从机开始同步之前,主机不能再进行写操作,如果主机仍在进行写操作,会导致同步失败,Slave_SQL_Running栏显示为NO,Last_Error会重复出现报错,导致同步无法继续执行。

#查看从机状态
show slave status;

如果在数据库命令行中执行该命令,回显的信息是没有分行的,行显示的数据错乱,可以通过增加“\G”分行展示从机状态:

#分行查看从机状态
show slave status\G;

如果从机的状态如下图所示,则说明同步是成功的:
在这里插入图片描述

2.6同步报错解决办法一

注意:从机开始同步之前,主机不能再进行写操作。如果主机仍在进行写操作,会导致同步失败,Slave_SQL_Running栏显示为NO,Last_Error会重复出现报错代码1032,导致同步无法继续执行。

在这里插入图片描述
那么怎么停止主机的写操作呢?停止主机的写操作,一定要在主机上停止所有的连接到数据库的程序和中间件,让程序不再往数据库中写入数据即可。

主机中往数据库写的操作停止后,从机再重新执行同步操作:

start slave;

2.7同步报错解决办法二

查阅了许多资料,大佬们的做法是这样的,从机登录数据库后执行以下命令:

 #sql_slave_skip_counter =1表示跳过1步错误,后面的数字可变,出现多少个报错则把数字改成这个数量可以跳过报错继续同步
stop slave;
set global sql_slave_skip_counter =1;  
start slave;

但是我按照大佬们的操作,还是没解决问题。如果错误比较多,或者中途还是会出现报错,导致无法完成主从同步,那么建议修改从机的数据库配置文件,跳过所有1032代码的错误:
在这里插入图片描述
在配置文件中[mysqld]添加以下内容:

#该方法用于跳过所有1032错误
slave-skip-errors=1032

如果想跳过其他的错误代码,可以把slave-skip-errors后面的代码替换为出现的错误代码。更粗暴的是,可以跳过所有的错误代码:

#该方法用于跳过所有错误代码
slave-skip-errors=all

修改配置文件之后,重新启动mysql数据库。

重启数据库之后,从机中重新执行主从同步命令:

start slave;

3.同步测试

在主机中新建数据库,在数据库中添加数据表,查看从库中是否将主库修改的内容同步过来:
在这里插入图片描述
主机新增了“ibms_ksy”数据库,同时导入了数据库报表。我们查看从机是否同步了新增的数据库:
在这里插入图片描述
可以看到,从机同步了主机新增的数据库,并将主库中的数据表也同步了过来。

参考文献

MySQL数据库主从同步是一种常用的数据复制方式,可以确保数据在多个服务器之间的一致性。以下是设置MySQL数据库主从同步的步骤: 1. 配置主服务器: - 在主服务器的配置文件中(一般是my.cnf),启用二进制日志功能(log-bin)并设置一个唯一的标识符。 - 配置一个用于同步的账户,并给予REPLICATION SLAVE权限。 - 重启主服务器,使配置生效。 2. 备份主服务器数据: - 使用mysqldump或其他备份工具,将主服务器上的数据备份到一个文件中。 3. 配置从服务器: - 在从服务器的配置文件中,配置一个唯一的服务器ID。 - 配置一个用于同步的账户,并给予REPLICATION CLIENT权限。 - 重启从服务器,使配置生效。 4. 导入主服务器数据到从服务器: - 将备份文件导入到从服务器上,可以使用mysql命令行或其他导入工具。 5. 启动主从同步: - 在从服务器上执行CHANGE MASTER TO命令,指定主服务器的地址、账户信息和二进制日志文件名。 - 使用START SLAVE命令启动从服务器的同步进程。 6. 检查同步状态: - 使用SHOW SLAVE STATUS命令查看从服务器的同步状态,确保同步正常运行。 以上是基本的主从同步设置步骤,根据具体情况可能会有一些额外的配置和调优。请注意,在配置主从同步之前,确保网络连接正常,主从服务器之间的时间差不大,并且主从服务器的硬件配置相当。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值