欢迎访问我的网站,希望内容对您有用,感兴趣的可以加入免费知识星球。

MySQL自动同步

Linux 迷途小书童 8个月前 (03-30) 386次浏览 0个评论

环境

  • ubuntu 18.04 64bit
  • mysql 5.7

简介

本篇使用 mysql 自带的自动同步功能,来实现2台 mysql 服务器数据的单向同步。基本情况如下图,要求主机 master (ip 地址是 192.168.1.161) 有任何数据更新时,备机 slave (ip 地址是 192.168.1.161) 数据也要同步。

mysql sync

实操

主机master操作

ip 地址:192.168.1.161

登录到本地数据库

mysql -u root -p

然后,创建进行同步操作的专用账号和密码,并授予该用户特定的权限

CREATE USER 'sync'@'%' IDENTIFIED BY 'syncpassword';

# 授权,所有数据库和数据表,任意主机登录。权限可以细分,如SELECT、INSERT、UPDATE等,* 和 % 都是通配符,想限定ip,可以写成 'sync'@'192.168.1.100',如果再加上权限的话,可以是这样 GRANT INSERT, UPDATE ON testdb.testtable TO 'sync'@'192.168.1.100';
GRANT ALL ON *.* TO 'sync'@'%';

然后输入

# 用户名是sync,密码是syncpassword,备机的ip是192.168.1.192。意思就是允许备机192.168.1.192上的用户sync使用密码syncpassword可以进行同步
grant replication slave on *.* to 'sync'@'192.168.1.192' identified by 'syncpassword';

# 使之生效
flush privileges;

接着,来修改 mysql 的配置文件,打开 /etc/mysql/mysql.conf.d/mysqld.cnf,添加语句

# 理论上是可以写任意值,建议一般不要用默认的值1
server-id               = 100

# 存储二进制的日志文件,这个非常有用,同步本质上是通过它来进行的
log_bin                 = /var/log/mysql/mysql-bin.log

# 同步的数据库名称,如果要同步多个数据库,就增加多条binlog-do-db数据
binlog-do-db            = testdb

# 开启后,从库从主库复制的数据会写入log-bin日志文件里
log-slave-updates       = 1

最后,重启下 mysql 服务

sudo /etc/init.d/mysql restart

如果启动服务时报错,可以查看文件 /var/log/mysql/error.log,进行排查并解决。

备机slave操作

ip 地址:192.168.1.192

同样是登录到本地数据库

mysql -u root -p

同样是创建进行同步操作的专用账号和密码,并授予该用户特定的权限

CREATE USER 'sync'@'%' IDENTIFIED BY 'syncpassword';
GRANT ALL ON *.* TO 'sync'@'%';
flush privileges;

接着编辑 mysql 配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf,并添加语句

# 二进制日志文件
log-bin = /var/log/mysql/mysql-bin.log

# 设置一个值
server-id = 101

# 主机和备机的数据库不一样,通过 -> 隔开。如果2个服务器数据库一致的话,可以这样写 binlog-do-db = testdb
replicate-rewrite-db    = testdb -> testdb1

# 如果是只同步某些表,每一个表一行
replicate-wild-do-table = mac_and_sale.productorder_carton
replicate-wild-do-table = mac_and_sale.productorder_carton_carton
replicate-wild-do-table = mac_and_sale.productorder_outbound

配置完成后,重启 mysql

sudo /etc/init.d/mysql restart

然后,进入 mysql 命令行配置主机

# 停止
stop slave;

# 查看master状态,注意 File 和 Position 字段的值,接下来就要用到
show master status;

mysql sync

# 设置master,包括了ip地址、同步账号、密码、
change master to
master_host='192.168.1.161',
master_user='sync',
master_password='syncpassword',
master_log_file='mysql-bin.000001',
master_log_pos=154;

最后输入

start slave;

# 查看slave状态,注意 Slave_IO_Running 和 Slave_SQL_Running 值
show slave status;

mysql sync

至此,配置就都完成了,不出意外的话,主机上的数据变化就会立刻同步到备机上去。

参考资料

喜欢 (0)

您必须 登录 才能发表评论!

Ads Blocker Image Powered by Code Help Pro

Ads Blocker Detected!!!

请关闭 Adblock 等类似浏览器插件,然后刷新页面访问,感谢您的支持!

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.