MySQL数据库跨服务器同步数据

在实际项目中经常回遇到跨服务器同步数据的问题,经查阅资料总结以下步骤(已验证):

1、环境背景:

数据库版本:5.6

操作系统:win7 64位(该方法同样适用于32位操作系统)

主服务器:192.168.0.88

从服务器:192.168.0.2

2、配置主服务器数据库

(1)修改主服务器配置文件(具体路径为/MySQL/MySQL Server 5.6/my.ini)

打开配置文件,在[mysqld]节点下添加如下内容:

#表示主服务器
server-id=1 
#记录日志
log-bin=mysql-bin01
#提供数据同步服务的数据库,在此数据库下的数据可同步到从服务器中
binlog-do-db=pension_center1 
#设置在主服务器上不记录日志的数据库
binlog-ignore-db=mysql 
#日志过期时间
expire_logs_days=10
如果配置文件中包含以上各项,覆盖即可。

(2)查看主服务器状态

打开数据库命令行客户端,输入命令:

show master status;
显示如下图,记住FilePosition两项的值:

MySQL数据库跨服务器同步数据_第1张图片

(3)查看log_bin的状态

命令行中执行

SHOW VARIABLES LIKE "%log_bin%";
MySQL数据库跨服务器同步数据_第2张图片
log_bin的值为ON表明正常开启。

(4)创建主服务器用户及权限

grant replication slave on *.* to 'mysql'@'192.168.0.2' identified by '123456' with grant option;

这里创建了一个名为'mysql',密码为'123456'的用户,地址为从服务器地址,即只允许该用户拥有从地址192.168.0.2访问数据库并备份表的权限。

这里还要注意一点:replication 属于grant权限,后面只能用*.*,不能指定某个数据库或者某个数据表,如果指定类似select等普通权限可具体到数据表。

(5)重启主服务器数据库

3、配置从服务器数据

(1)修改从服务器配置文件

打开配置文件,在[mysqld]节点下添加如下内容:

#表示从服务器
server-id=2
#记录日志
log-bin=mysql-bin02
#同步的数据库 
replicate-do-db=pension_center1
#同步的数据库指定表 
replicate-do-db=pension_center1.test
#不记录日志的数据库
replicate-ignore-db=mysql
#日志过期时间
expire_logs_days=10
(2)打开从服务器数据库命令行客户端,执行以下命令:

change master to
master_host='192.168.0.88',#主服务器地址
master_user='mysql',#主服务器数据库用户名
master_password='123456',#主服务器数据库密码
master_log_file='mysql-bin01.000001',  #填写步骤2(2)中File项的值
master_log_pos=4880; #填写步骤2(2)中Position的值
(3)重启从服务器

(4)执行启动从服务器模式命令

start slave;
(5)执行查看进程状态命令

show processlist;
查看User值为system user的项,如果其State值为“Waiting for master to send event”和”Slave has read all relay log: waiting for the slave I/O thread to update it“,则从服务器已连接主服务器。

(6)执行查看从服务器运行状态命令

show slave status;
如果Slave_IO_Running的值为Yes,Slave_SQL_Running的值为Yes,则从服务器正常运行。如果不正确,查看错误日志,一般位于data目录下。

4、从服务器数据库中新建数据库pension,主服务器中新建表并插入数据,查看从服务器数据库,是否存在相同的数据库表及数据。


你可能感兴趣的:(mysql)