最新消息:国外VPS购买直达:GigsGigsCloud | 搬瓦工 | Vultr | Digitalocean | Virmach

MySQL(Mariadb)数据库实现主从同步(主从复制、实时同步、实时复制)

技术教程 风为裳 来源:秋风雅居 20浏览 0评论

MYSQL主从同步是在MySQL主从复制(Master-Slave Replication)基础上实现的,通过设置在Master MySQL上的binlog(使其处于打开状态),Slave MySQL上通过一个I/O线程从Master MySQL上读取binlog,然后传输到Slave MySQL的中继日志中,然后Slave MySQL的SQL线程从中继日志中读取中继日志,然后应用到Slave MySQL的数据库中。这样实现了主从数据同步功能。

为什么要做主从同步?主从同步的用途是什么?

1、实时备份数据,防止主服务器挂掉,导致数据库也没了

2、读写分离,对于大项目,一般都是数据库读写分离,特别是多区域的项目,可以每个区域一个从服务器,这样可以减轻主服务器的压力

下面我们正式开始,首先我们要准备至少2台机器,假设一台是我们网站的数据库服务器A,另一台是用来实时同步A服务器的备用服务器B。

目的:实现当A服务器的数据库有变动时,实时同步所有变动到B服务器。

我的测试环境是Debian + Mariadb数据库,提示:主从服务器的数据库版本最好相同。

安装Mariadb数据库并设置root密码为123456,主从服务器的安装方法都是一样的。

apt install mariadb-server -y
mysql -uroot -e "set password for root@'localhost' = password('123456');"
mysql -uroot -e "flush privileges;"

一、配置主服务器A

1、修改MySQL(Mariadb)数据库的配置文件,在配置文件的[mysqld]节点下新增server-id和log-bin参数

Debian的Mariadb配置文件是/etc/mysql/mariadb.conf.d/50-server.cnf

打开该配置文件,并找到[mysqld]节点,在该节点下增加两个参数

server-id=1

log-bin=mysql-bin

注意:如果节点下之前就有上面两个参数则不需要重新添加。server-id=1中的1是唯一标识,大家可以自行修改成其它数字,只要不跟后面的从服务器的id相同即可。log-bin表示的是日志文件,mysql-bin是文件名,也是可以大家随意修改的。

修改后如下图:

2、设置MySQL(Mariadb)数据库允许远程连接

把/etc/mysql/mariadb.conf.d/50-server.cnf配置文件中的bind-address = 127.0.0.1只允许本机连接改成bind-address = 0.0.0.0允许任意机器连接,要不然后面从服务器会连接不上主服务器

3、登录MySQL(Mariadb)数据库,添加给从服务器用来登录和同步数据使用的账号

mysql -uroot -p123456

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

注意输入结尾的分号,其中*.*表示所有数据库,repl是用户名,123456是密码,%表示允许所有IP连接,如果想只允许指定IP进行同步,则可以将%替换成具体的IP,如果是想允许某个IP段访问,则可以改成这种格式:192.168.1.%,表示允许192.168.1.1-12.168.1.255的IP进行访问。

4、添加完成后输入exit退出数据库,然后systemctl restart mysql重启数据库服务

5、登录MySQL(Mariadb)数据库

mysql -uroot -p123456

show master status;

记录下File和Position的值,后面配置从服务器的时候需要用到。到此为止,主服务器的配置就已经完成了。

二、配置从服务器B

1、修改MySQL(Mariadb)数据库的配置文件,在配置文件的[mysqld]节点下新增server-id参数

Debian的Mariadb配置文件是/etc/mysql/mariadb.conf.d/50-server.cnf

打开该配置文件,并找到[mysqld]节点,在该节点下增加两个参数

server-id=2

注意:如果节点下之前就有上面两个参数则不需要重新添加。server-id=2中的1是唯一标识,大家可以自行修改成其它数字,注意不要跟之前配置的主服务器的id相同即可。

2、配置主服务器的连接账号密码等信息

mysql -uroot -p123456

change master to master_host='你的主服务器的IP',master_port=3306,master_user='主服务器添加的账号repl',master_password='密码123456',master_log_file='mysql-bin.000001',master_log_pos=313;

log_file就是主服务器File的值,master_log_pos就是主服务器Position的值。

接着执行start slave;启动同步功能

然后执行show slave status \G;查看同步状态

看到以下两个参数是YES就说明主从同步已经配置成功。

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

接下来可以在主服务器上尝试新建数据库,建表,增删改数据,看看是不是所有操作都会同步到从服务器上去了?

如果是要多台从服务器的话,则按照从服务器的配置步骤在新的服务器配置即可。如果想要改变从服务器上配置的主服务器信息,则需要先登录数据库,然后执行stop slave;停止同步功能,然后再执行change master to等语句即可。

相关参考资料

https://segmentfault.com/a/1190000008663587

https://blog.csdn.net/mycwq/article/details/17136001

转载请注明:风为裳 » MySQL(Mariadb)数据库实现主从同步(主从复制、实时同步、实时复制)

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址