数据库的复制在实际生产环境中对于提高数据的安全性和数据库的性能是必不可少的重要手段,但不管手段多么高明,都要从简单的复制开始!今天的实验就从简单复制开始!
实验准备
服务器类型/名称 | ip地址 | 软件版本 | 平台 |
master/node4 | 192.168.1.114 | mariadb-10.0.10 | CentOS 6.5 x86_64 |
slave/node3 | 192.168.1.113 | mariadb-10.0.10 | CentOS 6.5 x86_64 |
注意:软件通常都具有向上兼容性,所以主节点的软件版本应该低于或和从节点相同,而不能高于从节点。
另外,node3、node4已经部署MariaDB,部署过程这里不再介绍,想了解的朋友可以戳这里
一、MariaDB简单主从复制
1、配置ntp服务器
为什么要配置ntp服务器呢?因为数据主从同步主要是根据主节点的二进制日志,主从节点如果时间不同步,同步数据就会出现很大问题。
ntp服务在CentOS 6.5上已经是默认服务,简单的话只需要启动服务即可,但在实际生产环境中,要根据实际需要配置。这里,我们在node1(可连接因特网)上面启动ntp服务
[[email protected] ~]# service ntpd start Starting ntpd: [ OK ] 同步时间 [[email protected] ~]# ntpdate 192.168.1.111 [[email protected] ~]# ntpdate 192.168.1.111
2、配置主节点(node4)
对于主节点我们要做的修改很少,因为试验环境简单,主要要在/etc/my.cnf中做三个修改:
(1)修改server-id,在主从结构中,没个节点的server-id都应该是唯一的;
(2)修改二进制日志的存放路径,在MariaDB的应用中,十分重要的一点就是二进制日志和数据库数据不能再同一目录中(最好是不在同一磁盘)存放;
(3)创建一个具有复制权限的用户帐号;
MariaDB [(none)]> grant replication client,replication slave on *.* to ‘slave‘@‘192.168.1.%‘ identified by ‘slavepass‘;
3、配置从节点(node3)
在/etc/my.cnf中做如下修改:
(1)修改server-id,并没有什么特别的规范,和主节点不同即可;
server-id = 200
(2)启动中继日志(如果从节点没有次从节点的话,即为末端节点时关闭二进制日志);
1、关闭二进制日志只需要注销二进制日志行即可,在MariaDB-10.0.10中其他方式是关不掉的; 2、开启中继日志 relay_log=/data/relaylogs/relay-log
(3)连接至主节点,开始同步;
MariaDB [(none)]> change master to master_host=‘172.16.26.4‘,master_user=‘slave‘,master_password=‘slavepass‘; MariaDB [(none)]> start slave;
至此,简单主从已经设置好了,并且已经同步好数据了,是不是比想象的简单呢?在从节点上看一下成果吧(图片不是初次同步结果):
二、复制的应用扩展
1、如何限定从节点只能进行读操作?
在从节点只进行读操作,对于数据安全十分重要。说起来很高大上,但实现起来却很简单,只需要在/etc/my.cnf中添加
read-only = on
然后重启MariaDB即可,查看从节点的状态:
显然只读状态已经激活。
注意:该操作只能显示那些没有super权限的用户。
2、如何主从复制时的事务安全?
在MariaDB的默认机制中,为了提高二进制日志的IO性能,用户提交的事务并不是直接写到二进制日志当中,而是缓存到二进制日志的缓冲区中,但这样的事务是不安全的,因为如果此时数据库崩溃,那么二进制日志缓冲区中的事务是不能被保存到二进制日志,进而同步到从节点;那么数据恢复的时候,就会出现数据的回滚。
为了避免以上情况,我们应该让事务部缓存,而直接写到二进制日志当中去,虽然这样做会降低数据库系统性能,但以性能换数据安全是值得的!因此我们需要在/etc/my.cnf中添加
sync_binlog=n ##设定多久同步一次二进制日志至磁盘文件中,0表示不同步,任何正数值都表示对二进制每n次写操作之后同步一次。 ##当autocommit的值为1时,每条语句的执行都会引起二进制日志同步,否则,每个事务的提交会引起二进制日志同步。