一、安装环境说明
- centos6.8;
- mysql5.7;
- vmware虚拟主机(master)192.168.5.108
- vmware虚拟备机(slave)192.168.5.109 同时主从机之间需要可以ping通—linux默认22端口是开通的。
注意:主从节点mysql服务的3306端口需要开放,因为他们之间是需要通信的。我这里直接用命令service iptables stop 关闭了防火墙。(生产环境中,不允许直接关闭的。)不过这个命令只是本次登陆有效。需要永久关闭防火墙请用其他命令。
二、主节点的配置
- 配置 /etc/my.cnf —–这是mysql的配置文件
- 然后重启mysql:service mysqld restart。
用root用户登陆mysql服务,创建一个从库访问权限的用户,如下命令:
>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;(这是开放远程调用权限,暂时用不到) /*赋予192.168.5.109也就是Slave机器有File权限*/ >GRANT FILE ON *.* TO 'root'@'192.168.5.109' IDENTIFIED BY 'root'; /*赋予192.168.5.109也就是Slave机器有复制权限*/ >GRANT REPLICATION SLAVE ON *.* TO 'root'@'192.168.5.109' IDENTIFIED BY 'root'; /*刷新*/ >FLUSH PRIVILEGES;
说明:这里只是为了演示,赋予的也是ROOT用户,在生产环境中请另外设置其他用户。
为从节点建立初态(其实就是备份的原始数据)
比如这里我创建了一个appdb数据库,里面没有任何数据表。也就是说需要同步的appdb数据库的初态就是没有数据,这个简单,只需要在从库中建立一个相同的数据库。
但往往实际环境中,有可能的场景是在一个已经上线的项目上扩展这个同步功能,此时需要同步的数据库是存在数据的,这时就需要先把数据复制到从节点,那么这时就可以用mysqldump命令来实现,导出一个xx.sql文件。然后在从节点导入这个sql文件即可实现从节点的初态。重启mysql,登录mysql,显示主库信息
>service mysqld restart >mysql -uroot -proot; >show master status;
注意这里的File字段,Position字段必须记录下来,后面配置从节点时需要用到。
三、从节点的配置
- 配置 /etc/my.cnf —–这是mysql的配置文件
- 然后重启mysql:service mysqld restart。
用root用户登陆mysql服务,指定master的信息:
mysql> stop slave; #关闭Slave mysql> change master to master_host='192.168.5.108',master_user='root',master_password='root',master_log_file='mysql-bin.000002', master_log_pos=154;(这里的mysql-bin.000002和154就是对应主机mysql的二进制日志文件名和读写位置) mysql> start slave; #开启Slave
验证配置是否成功 —命令:show slave status \G;
请注意第九行的154,就是我们上面设置的位置,看到以上内容就证明配置成功了。- 建立初态,虽然这里只需要简单的创建一个名称为appdb数据库,但却是同步的基础,当原始量有数据表数据时,这个时候就需要先导入上面的xx.sql文件。
测试
在master上新建表test1,然后到slave上查看,会发现也多了个test1数据表(一开始是没有表的), 在master上的test1表上插入一条数据,然后到slave的test1表中select查看一下,会发现同样的一条数据库。 同样进行其他表的增删改,表数据的增删改,会发现slave已经完全同步了master中数据库为appdb的数据。
到此已经成功的完成了一个mysql主从架构的备份,但是有个漏洞:
比如说在数据同步中,如果我直接修改了从节点的数据,会怎样?这个我还没去验证,估计系统会报错,同时会停止slave的工作。毕竟这是已经违背了同步的初衷。所有需要完善,解决办法是不让用户修改从库中的数据。待续
既然有了同步数据,那么如何恢复?是否可以做mysql的HA?
还有就是如果生产环境中误操作,如何回退数据?