全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 4431|回复: 33

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

  [复制链接]
发表于 2019-1-21 18:02:24 | 显示全部楼层 |阅读模式
本帖最后由 3000 于 2019-1-24 19:21 编辑

原文链接:http://www.28ab.cn/detail.php?id=6920


有兴趣的可以看看这个主主同步技术帖:https://www.hostloc.com/thread-516920-1-1.html


大家都知道,对于一个带数据库的项目来说,数据丢了,就相当于项目毁了。现在很多人都是数据库跟网站文件分开服务器的(即站库分离 + 图床),为的就是保护数据库。假如网站文件服务器挂了,可以重新再搞一台服务器来重新部署一下页面,但是如果数据库没了呢?那就全部数据没了。


现在很多人都有了备份数据的习惯,这是非常好的事情。但是备份一般我们现在也是用定时任务,在某个时间节点备份一次或多次,并没有说实时的备份这样。那么这样一来还是存在风险。因此,今天我们要讲的就是MySQL(Mariadb)数据库数据库的实时备份(专业术语叫主从同步,即有一台或者多台备用服务器,实时同步主要数据库服务器的内容)


下面我们正式开始,首先我们要准备至少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

接下来可以在主服务器上尝试新建数据库,建表,增删改数据,看看是不是所有操作都会同步到从服务器上去了?
发表于 2019-1-21 18:03:51 | 显示全部楼层
谢谢,可惜不能评分
发表于 2019-1-21 18:05:18 | 显示全部楼层
感谢大佬分享经验
发表于 2019-1-21 18:12:04 | 显示全部楼层
标记以下有空慢慢看。
发表于 2019-1-21 18:17:29 来自手机 | 显示全部楼层
搞个一键吧,会的不难,不会的差不多
发表于 2019-1-21 18:27:34 | 显示全部楼层
大佬 你可以在主数据库创建一个数据表 你看看从数据库会不会也创建一个表

我的测试是可以增删改数据,,但是不能同步新建的数据表
 楼主| 发表于 2019-1-21 18:59:35 | 显示全部楼层
VMCloud 发表于 2019-1-21 18:27
大佬 你可以在主数据库创建一个数据表 你看看从数据库会不会也创建一个表

我的测试是可以增删改数据,,但 ...

我这里所有操作都能同步。
发表于 2019-1-21 19:28:42 来自手机 | 显示全部楼层
这是您写的教程吗?我的意思是我照着教程还是搞不出来的话,是否可以请教您
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-5-6 12:28 , Processed in 0.063592 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表