当前位置:   article > 正文

Linux下实现两台MySQL服务器主从同步_linux部署两节点mysql服务器

linux部署两节点mysql服务器

MySQL 主从同步 ,即一个 MySQL 服务都是 Master,另一个MySQL服务的 Slave。

一、准备

服务器

MySQL 服务器 IP 地址
master 192.168.1.201
slave 192.168.1.202

注:操作过程中注意两边数据的一致!!!

二、具体操作

1、master 配置

修改my.cnf文件

vim /evc/my.cnf
  • 1

配置如下属性

[mysqld]  
​  
# 服务器唯一标识  
​  
server-id=1  
​  
# 二进制日志文件名  
​  
log-bin=mysql-bin  
​  
# 需要备份的数据库,多个数据库用 , 分隔  
​  
binlog-do-db=piumnl  
​  
# 需要复制的数据库,多个数据库用 , 分隔  
​  
replicate-do-db=piumnl  
​  
# 中继日志文件名  
​  
relay_log=mysqld-relay-bin  
​  
# 互为主从需要加入这一行  
​  
log-slave-updates=ON  
​  
# 禁用符号链接,防止安全风险,可不加  
​  
symbolic-links=0  
​  
# 可不加  
​  
# resolve - [Warning] Slave SQL: If a crash  
# happens this configuration does not guarantee that the relay log info will be  
# consistent, Error_code: 0  
​  
master-info-repository=table  
​  
relay-log-info-repository=table  
​  
relay-log-recovery=1  
​  
​  
# 可不加  
​  
# 禁用 dns 解析,会使授权时使用的域名无效  
​  
skip-host-cache  
​  
skip-name-resolve  
​  
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

2、slave 配置

修改my.cnf文件

vim /evc/my.cnf
  • 1

配置如下属性

# 不再解释各个配置项  
[mysqld]  
server-id=2  
log-bin=mysql-bin  
    
binlog-do-db=piumnl  
replicate-do-db=piumnl  
relay_log=mysql-relay-bin  
log-slave-updates=ON  
symbolic-links=0  
    
# resolve - [Warning] Slave SQL: If a crash happens this configuration does not  
# guarantee that the relay log info will be consistent, Error_code: 0  
    
master-info-repository=table  
relay-log-info-repository=table  
relay-log-recovery=1  
    
skip-host-cache  
skip-name-resolve  
    
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

3、创建同步用户

slave创建同步用户:

create user 'rep'@'%' identified by 'rep';    # 创建一个账户  
​  
grant replication slave on *.* to 'rep'@'%';  # 授予该账户对任意数据库任意表的主从同步权限

grant all on *.* to 'rep'@'%';  #给新创建的用户赋予操作数据库的权限
  • 1
  • 2
  • 3
  • 4
  • 5
备注:

Linux 下 MySQL 对 root@% 关闭了 grant_priv 权限

此处备份用户帐号和密码可不一致,此处为了简化操作使用一样的帐号和密码
  • 1
  • 2
  • 3
  • 4
  • 5

注:如果想做双向同步则每个MySQL服务器都要创建用户

4、重启服务器

service mysql restart
  • 1

5、开启同步

查看 master 状态

show master status\G;
或
show master status;
  • 1
  • 2
  • 3

注意:此处需要关注 File 和 Position 值

操作slave

stop slave; 

change master to master_host='master_hostname', master_user='rep_username', master_password='rep_password', master_log_file='mysql-log.000003', master_log_pos=154,get_master_public_key=master_server-id;  

start slave;
  • 1
  • 2
  • 3
  • 4
  • 5
master_hostname:master的IP地址
rep_username:刚刚注册新用户的用户名
rep_password:刚刚注册新用户的密码
master_log_file:就是第一步操作的 File 值  
master_log_pos:就是第一步操作的 Position 值  
master_server-id:master的my.cnf文件中的server-id
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

注:如果MySQL服务器的版本为8,则在加入最后一个属性即可

6、查看结果

show slave status\G;  
  • 1

查看最重要的两项,两个都必须为 Yes ,有一个为 No 都要去查看错误日志文件,看看什么地方存在问题

 Slave_IO_Running: Yes  
 Slave_SQL_Running: Yes
  • 1
  • 2

注:如果要做成双向同步则上述操作在两个MySQL服务器中都要进行

7、测试

在 master中插入数据,并在slave使用新注册的用户查看是否及时出现预期的数据

三、常见错误及解决方法

1、如果操作弄乱了 master 与 slave 的日志,可使用如下操作进行重置。

reset master; # 重置 master 的配置,包括二进制日志  

reset slave; # 重置 slave 的配置
  • 1
  • 2
  • 3

2、出现Slave_IO_Running:No问题

原因

两台主从数据库的uuid相同了(没猜错的话,各位应该是直接克隆了linux服务器,然后配置主从数据库,一通操作,到最后启动从数据库,发现的这个问题吧)。

网络问题

my.cnf配置问题

权限问题
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

(1)UUID解决

使用一下命令查询UUID所在文件的位置

find / -iname "auto.cnf"
  • 1

删除该文件

rm 要删除的文件名
  • 1

重启MySQL服务

service mysql restart
  • 1

(2)网络问题解决

虚拟机下的Linux系统选用的网络适配器是选择的nat共享主机ip的,也就是说主机与从机其实是不在同一个局域网中的,所以自然无法连接上。

选择桥接模式,这个模式就是会拥有一个同一局域网下的ip地址,重新进入之后,在进行测试

网络问题还有一种可能是没有关闭防火墙,其他主机无法连接MySQL服务器,这是采用以下命令去关闭防火墙即可。

systemctl stop firewald.service //关闭防火墙
systemctl disable firewald.service //永久关闭防火墙
systemctl list-unit-files |grep fire  //查看防火墙状态
  • 1
  • 2
  • 3

(3)my.cnf文件配置问题解决

参考具体操作中的master配置和slave配置,修改自己的配置问题

(4)权限问题解决

创建的新用户replication slave和file权限是必须要赋予的,如果仅仅是自己使用或测试可以赋予all权限

3、出现Slave_IO_Running: Connecting问题

原因及解决方法与Slave_IO_Running:No问题基本相同

还有之中可能即为:由于每次数据库重启后都会导致master status发生变化,所以需要根据当前的master status来修改从数据库中的SQL同步语句

4、出现Slave_SQL_Running: No问题

原因

程序在slave上进行了写操作

slave机器重起后,事务回滚造成的.
  • 1
  • 2
  • 3

事务回滚的解决方法

mysql> stop slave ;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;//将这个全局变量赋值为1
mysql> start slave ;
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/918898
推荐阅读
相关标签
  

闽ICP备14008679号