Mysql主从同步
1.实现前提(环境)
<1>两台centos7.0系统环境
<2>两台centos7.0都需要安装好Mysql,本次使用的是5.5.60-MariaDB
2.配置好NAT静态网络
可以参考https://blog.csdn.net/csdn_huzeliang/article/details/78632701
注:<1>为了防止之后发生错误,在本地打开网络配置,找到
打开属性配置一下:
只需要配置ip一栏就可以了,其中192.168.19.1,前三段要依据你在配置虚拟机网络时配置的Ip地址,最后一位只要不跟在虚拟机中配置的相同即可。
<2>在更改虚拟机中的配置文件时,一般情况下只需要更改ifcfg-ens33这个文件就可以了,如下(红框中的部分是一定要配置的,当然还有ONBOOT要yes,BOOTPROTO要设置为static)
DNS=114.114.114.114 //也可用谷歌8.8.8.8或者腾讯的
IPADDR=192.168.19.3 //这个是该虚拟机要使用的Ip,(ping的时候就是用这个ip)
NETMASK=255.255.255.0 //默认一般设置为这个
GATEWAY=192.168.19.2 //这个是在虚拟机中配置的静态网关地址
配置完之后可以使用ip addr 来查看配置的IP地址
3.安装mysql(mariadb)
<1>之前在台式上装了Mysql的,换成本子之后莫名的装不上了,所以用mariadb,具体的安装过程可以参考:
https://www.cnblogs.com/bincoding/p/6208521.html
这里就不做多余的介绍了。
安装期间可能遇到的错误:
<1>如果在使用Yum的时候报错可以在/etc/resolve.conf 中添加如下内容:
<2>该错误一般发生于使用yum成功安装Mariadb(mysql)之后使用命systemctl start mariadb 启动Mariadb时会报该错误:
解决方法:
a.执行命令rpm -qa |grep -i mysql 查看安装了于Mysql相关的文件
b.对相关文件进行彻底的删除:
yum remove mysql-community mysql-community-server mysql-community-libs mysql-community-common
c.重复1命令看看是不是还有相关的文件,还有的话做出与2相似的删除操作
d.再使用命令yum install mariadb-server进行下载
e.systemctl start mariadb 启动数据库
<3>安装到一半强行退出之后yum被lock了
执行:
rm -f /var/run/yum.pid
4.防火墙设置
要把防火墙中的3306端口开启,因为mysql默认为3306端口,不然后面两个数据库数据不能连通。参考:
https://blog.csdn.net/weiyangdong/article/details/79540217
实现语句:firewall-cmd --zone=public --add-port=3306/tcp --permanent
本次试验中因为只做主从试验,所以采用了最简单暴力的操作,直接把防火墙关了:
使用命令行:systemctl stop firewalld
5.对Master端设置
之后先进行master一端的配置,要在master一端的配置文件(/etc/my.cnf)进行一些配置,比如你要同步哪一个数据库之类的。
其中:
<1>server-id不能配置的与slave一端相同,一般配置为Ip地址最后一位(个人觉得比较好记);
<2>binlog-ignore-db配置的是你忽略掉的数据库也就是不需要进行同步的库
<3>binlog-do-db配置的是你想要进行同步的库
6.查看master状态
配置完之后使用命令mysql -u -root -p进入Mysql,输入show master status查看下图内容:
其中红框中的内容要记住,等会再配置slave的时候要用到。
7.配置Slave端
转到slave客户端(另一台虚拟机),同样要先到同样位置的对my.cnf进行配置
8.在Slave端进入Mysql后进行配置
进入Slave端的Mysql中,(记住在此之前如果你使用的是root用户来进行数据库同步时,要在master和slave端中的Mysql中都对root用户授权,允许外网访问)
在Slave端mysql中执行:
<1>stop slave;
<2>change master to master_host='192.168.19.3',master_user='root',master_password='lhy3323101',master_log_file=' master-bin.000007', master_log_pos=245;
注:其中192.168.19.3是主数据库Ip,红字部分可以在主数据库中使用show master status 来查看
<3>start slave;
<4>show slave status\G会出现如下界面:
要红框中的两个状态都为yes时,Master_server_Id才会是Master中配置的id,这样就配置完成了。
9.验证是否成功
之后可以使用Navicat来测试,分别连上两个数据库,之后在Master中你配置要同步的库中进行修改,再到Slave数据库中刷新一下对应的数据库就可以看到数据同步过来了。
10.总结以及补充可能报错地方
至此,如果不出现太大的意外,应该是已经可以顺利完成主从同步功能了。
以下再给出几个可能会出错的地方:
<1>数据库的话我使用的是test,据说有的数据库是不可以同步的
<2>如果在使用show slave status\G 查看的时候发现有报错的时候,要学会去看报错日志,日志的话可以使用命令ps -ef|grep mysql 来查找日志位置:
然后根据日志做出对应的修改(我遇到的是在配置文件里面把NAMES打成了NAEMS,折腾了很久看了日志之后觉得真的坑,所以出错了日志一定要去看啊….),如果是跟我一样的拼写错误,可以用命令:
find .|xargs grep -ri "NAMSE" (这个命令可以查找到当前目录及其子目录下含有指定字符串的文件位置,之后到文件中去更改就好了。
<3>有个小坑做一下备忘:设置slave的时候=号后面“”中不能有空格,不然会找不到对应Log文件之类的。