数据库的复制在企业运用颇为广泛,牢牢的掌握数据库的复制对于我们来说很重要,数据库的复制又分为主从复制和主主复制,主从复制的要求是一台数据库作为主服务器而另一台服务器作为从服务器,通过主服务器的变化引起从服务器的变化,而主主复制则是俩台数据库互为主,随机操控其中的一台数据库,相应的在另一台数据库也会产生相应的变化
准备工作:做好数据备份和数据同步,
1,为保持两台数据同步,停止两台数据库数据更新,mysqldump -u root -p 数据库名 > /home/db_bak.sql #导出数据库A数据
2,通过 sql 文件导入数据库B,举例:mysql -uroot -p123456 < /tmp/testdatebase.sql
可能遇到的问题:
A:mysql 导入报错(ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_E)
解决方案:
当前GTID_EXECUTED参数已经有值,而从集群倒出来的dump文件中包含了SET @@GLOBAL.GTID_PURGED的操作
解决方法:
方法一:reset mater
这个操作可以将当前库的GTID_EXECUTED值置空
方法二:–set-gtid-purged=off
在dump导出时,添加–set-gtid-purged=off参数,避免将gtid信息导出
mysqldump -uroot -p --set-gtid-purged=off -d sso > sso1.sql
在添加参数前的导出文件
添加参数之后的文件
B: service mysqld start 执行的时候报错:Job for mysqld.service failed because the control process exited with error code. See "systemctl sta![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/91324aa872032e8bcecf93f16af33ba0.png)
查看mysqld服务启动报错日志/var/log/mysqld.log:[Warning] Can’t create test file xxx lower-test
解决方案:chmod -R 777 /var/lib/mysql(给数据库数据文件目标授权777)
(一)主从复制
如果防火墙干扰则需执行这一步:
为防止防火墙对以后的操作造成影响,故在实验开始前关闭防火墙俩台服务器均需关闭防护墙
1,修改数据库的相应配置文件vim /etc/my.cnf (数据库A)
2,同时修改另一台数据库的配置文件 (数据库B)
3,重启这两台服务service mysqld restart
4,在主服务器上(A)为从服务器(B)赋予权限,下面参数为B服务器的账号密码
5,查看主服务器的状态
6,登录从服务器B的mysql服务改变其属主权限,下面参数为A服务器的IP、账号、密码、日志文件、Position
7,B服务器上开启slave服务并查看slave状态信息
pass:从服务器上的slave状态信息中的日志文件和position和主服务器上的master状态的保持一致,就表示配置成功了。
(二)主主复制(两台互为slave和master,slave信息对应对方的master)
主主复制和主从复制差不多,但是还是有一定的区别,主主复制中不分主次,俩台服务器互为主。也可以说主主复制是建立在主从复制之上
1,修改配置文件/etc/my.cnf(服务器A)
服务器B
俩台服务器配置完成后一定要重启服务,如果重启服务失败说明配置文件信息有错,所以在配置文件信息的时候一定要特别小心
2,锁死数据库不再更新(服务器B)
3,备份数据库以防在后续对数据库的操作中出现错误能够及时的恢复数据库
4,备份完成后解锁数据库
5,B做A的slave:
①服务器B授予服务器A权限并刷新权限
②显示A的主节点二进制文件信息
③设置B的主服务器为A(设置谁是主相应的二进制文件及二进制文件位置即设为作为主的那台服务器的相关信息)
设置完成后开启slave服务,B作为slave,A为它的master,B的slave状态信息跟A的master状态信息一致就表示B会跟随A的数据同步
6,A做B的slave(跟上一步一样配)
总结:
slave跟master信息对应上,并且Slave的IO和SQL运行状态是Yes,表示配对成功