随着大数据的发展,数据的安全问题日益凸显,往常不被重视的数据库维护变得必不可缺,数据的灾备变成个各大企业/个人站长业务运行中必须重视的环节。上一篇文章提到了自动化备份避灾的几种方案及选择,今天就来实践一下主从/双向异地热备份方案。
Mysql数据库同步(复制)的概念,主从同步使得数据可以从一个服务器无缝迁移复制到另一台服务器。这个过程中一台服务器充当主服务器(master),另一台或另外多台充当从服务器(slave)。复制进程I/O是异步进行的,所以服务器不需要一直保持关联的状态。
Mysql数据库的主从同步在现实中应用非常广泛,例如熟知的异地灾备、负载制衡、提升数据库性能、保护源数据安全等等方面均使用到了Mysql数据库的主从同步功能。
工作原理
主服务器(master)将自己的数据变化以节点的方式记录到一个二进制日志中,从服务器(slave)的I/O线程通过主服务器授权的账户查询日志节点,写入到自身的中继日志,SQL线程读取中继日志中的数据变化节点与自己的数据库日志对比,若主服务器(master)发生变化则自身跟进重放执行写入自己的数据库,若节点未变化则进入休眠状态,等待主服务器(master)的数据节点变化。
准备
master主服务器:45.32.250.228
slave从服务器:108.160.131.26
两台服务器的系统环境必须相同,数据库版本必须相同,这里我采用了Mysql 5.7 的版本,这个版本在当先还是主流服务器数据库版本,非常实用。
配置主服务器master
修改主服务器(master)的数据库配置文件my.cnf,这个文件一般路径为/etc/my.cnf
实用vi /etc/my.cnf在其中主服务器(master)数据库配置文件中添加如下代码:
- log-bin=mysql-bin
- server-id=1
- binlog-do-db=testsql
- binlog-ignore-db=nosql
- log-bin=/var/lib/mysql/binlog
- log-slave-updates=YES
log-bin=mysql-bin为开启二进制日志,server-id=1为服务器唯一ID,具有唯一性不可重复,binlog-do-db为需要同步(复制)的数据库名称,binlog-ignore-db=nosql为同步(复制)时排除在外的服务器,log-bin=/var/lib/mysql/binlog为指定日志文件,如果主数据服务器启动失败,通过cat /var/log/mysqld.log | tail -30 查看mysql启动失败的日志,从日志内容寻找解决方案,log-slave-updates=YES为从服务器同步以后记录日志。
配置完成后service mysqld restart重启mysqld进程。
添加用于链接主服务器数据库的授权账户,用户名:master 密码:master-password
允许服务器108.160.131.26进行访问。
- mysql> CREATE USER ‘master’@’108.160.131.26’ IDENTIFIED BY ‘master-password’;#创建用户
- mysql> GRANT REPLICATION SLAVE ON *.* TO ‘master’@’108.160.131.26’;#分配权限
- mysql>flush privileges; #刷新权限
REPLICATION SLAVE权限为:向从服务器(slave)数据库请求做出应答。
通过mysql命令以root账户登录主服务器(master)数据库,mysql -uroot -p,输入密码登录数据库服务器,执行SHOW MASTER STATUS;
- mysql > SHOW MASTER STATUS;
- +——————+———-+————–+——————+
- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
- +——————+———-+————–+——————+
- | mysql-bin.000003 | 73 | testsql | nosql |
- +——————+———-+————–+——————+
我们可以看见要使用到的二进制文件mysql-bin.000003,数据位置节点73,指定同步的数据库testsql,同步时排除的数据库nosql。
配置的过程种 Binlog_Do_DB和Binlog_Ignore_DB我们基本只需要选择一项就可以了。
配置从服务器slave
同样需要先修改数据库服务器配置文件vi /etc/my.cnf,添加如下代码
- server-id=2
- replicate-do-db=testsql
- replicate-ignore-db=nosql
server-id=2表示从服务器salve的服务器id,具有唯一性这一点必须注意,replicate-do-db为需要同步的数据,replicate-ignore-db=nosql 同步时排除的数据库。
通过mysql命令以root账户登录主服务器(master)数据库,mysql -uroot -p,输入密码登录数据库服务器,将主服务器提供的授权账户导入为slave账户
- stop slave;
- change master to master_host=’45.32.250.228′,master_user=’master’,master_password=’master-password’,master_log_file=’mysql-bin.000003′, master_log_pos=73;
- start slave;
这里我们用到了主服务器提供的授权账户master,二进制文件mysql-bin.000003,数据节点编号73.
然后执行show slave status\G;查看同步状态
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
这两项正确表示完成数据库的对接工作,同步(复制)线程正在工作中,Waitin for master to send event…表示从数据库slave正在等待主数据库master更新数据。
小结
数据库主从同步我已经配置按成了,出于好奇我将主从颠倒过来再配置以此居然发现形成了双主服务器热同步,这样就可以为两段都需要有修改权限的业务营造了一个高效的环境。
利用主从同步可以一主多从的特点,我们还可以将数据库进行多种形式多种架构的组合使用,以达到让业务运行更加高效安全的效果。
参考文章:https://blog.csdn.net/hguisu/article/details/7325124
往期内容推荐
1#Mysql数据库自动化数据灾备方法及选择