欢迎访问我的网站,希望内容对您有用,感兴趣的可以加入我们的社群。

MySQL自动同步

Linux 迷途小书童 2年前 (2023-03-30) 751次浏览 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)

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