MySQL主从同步配置

2020-05-09  本文已影响0人  溪水散人

机器准备

准备好三台虚拟机,分别安装MySQL。笔者为了省事,先准备了一台虚拟机,安装台好MySQL(但也埋下了祸根),再以此虚拟为母体,克隆两台虚拟机,这样MySQL也不用另外安装了。

VM12,centos7,mysql5.7
0.安装weget:yum -y install wget
1.wget https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm
2.rpm -ivh mysql57-community-release-el7-11.noarch.rpm
3.yum install mysql-community-server
4.启动:systemctl start mysqld
4.查找root密码: grep 'temporary password' /var/log/mysqld.log
      不成功:
        清除:rm -rf /var/lib/mysql
         重启:systemctl restart mysqld
        执行:grep 'temporary password' /var/log/mysqld.log
        查看密码
5.登录:mysql -u root -p
6.设置为utf-8默认编码
        修改mysql的/etc/my.cnf 文件中的字符集键值
        在[mysqld]字段里加入character_set_server=utf8,如下:  
        [mysqld]  
        port = 3306  
        socket = /var/lib/mysql/mysql.sock  
        character_set_server=utf8
7.重启:systemctl restart mysqld
8.查看编码:show variables like 'character%';//都设置为了UTF-8
9.设置远程访问:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'myPassWord' WITH GRANT OPTION;
FLUSH   PRIVILEGES;
6.其他命令:
         set password for 'root'@'localhost'=password('myPassWord');// 修改密码
        systemctl restart mysqld;     //重启
        systemctl start mysqld;        //启动
        //设置开机自动启动
        systemctl enable mysqld
        systemctl daemon-reload

克隆机器

克隆机器也有很多注意的地方,MAC地址要重新生成

主:192.168.25.128
从0:192.168.25.133
从1:192.168.25.134

说明:因为在128号机器安装了MySQL,133,134机器是以128为母体克隆的,所以任何环境和配置都和128机器的相同,其中包括MySQL的密码server-iduuid.

创建库表

create table `t_order` (
`order_id` int (11),
`user_id` int (11)
); 

注意:库名不同[涉及到下面的一个重要配置],但表结构一样

主库master配置

修改/etc/my.cnf配置

#配置server_id
server_id=1
#绝对路径,也是开启bin-log
log-bin=/var/lib/mysql/mysql-bin
sync_binlog=0
##设置日志的过期天数
expire_logs_days=7
## 要主从复制的库
binlog-do-db=master
## 忽略的库
binlog-ignore-db=information_schema
binlog-ignore-db=sys
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema

给从库授权

赋予从库权限账号,允许用户在主库上读取日志 ,同时赋予 REPLICATION SLAVE的权限

grant FILE on *.* to 'root'@'192.168.25.133' identified by 'myPassWord';
grant replication slave on *.* to 'root'@'192.168.25.133' identified by 'myPassWord';
flush privileges;
grant FILE on *.* to 'root'@'192.168.25.134' identified by 'myPassWord';
grant replication slave on *.* to 'root'@'192.168.25.134' identified by 'myPassWord';
flush privileges;
systemctl restart mysqld
show master status;
主库状态.png

从库slave0配置

#配置server_id
server_id=2
## 这里写的不是全路径,也可以写全路径
log-bin=mysql-bin
binlog-ignore-db=information_schema
binlog-ignore-db=sys
binlog-ignore-db=mysql
################################################
#主库和从库的库名不一样,如果一样,以注释方法配置,  #
#不一样,以未注释方法配置                         #
###############################################
## replicate-do-db=slave0
# 以这种映射的方式配置
replicate-rewrite-db = master -> slave0
replicate-ignore-db=mysql
log-slave-updates
slave-skip-errors=all
slave-net-timeout=60
systemctl restart mysqld
mysql> stop slave;
mysql> change master to master_host='192.168.25.128',master_user='root',master_password='myPassWord',master_log_file='mysql-bin.000002', master_log_pos=154;
mysql> start slave;

注意:master_log_file、master_log_file信息通过在主库中执行SHOW MASTER STATUS 命名查看

Slave0状态.png

如过 Slave_IO_Running: Yes和Slave_SQL_Running: Yes,则说明主从同步成功。 否则主从不成功。

从库slave1配置

配置与slave0配置大体一致,主要是server_id不一样,master_log_file、master_log_file信息要设置为最新的,重新查看

测试

在master库的表中插入一条数据,如果slave0和slave1库中的表同步更新,则说明主从同步配置成功

否则,继续往下看

问题

前面说到埋下祸根,现在就来解释一下。

前面在slave0从库中SHOW SLAVE STATUS,发现Slave_IO_Running=NO,没有起来,通过查到错误日志,发现有一行错误日志写道:

2020-05-09T03:25:57.881822Z 3 [ERROR] Slave I/O for channel '': Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. Error_code: 1593

UUID竟然重复了,克隆的机器啊,当然会重复,既然有问题,那就解决他

参考 https://blog.csdn.net/sunbocong/article/details/81634296博客,写的比较详细,具体方式是:删除和重新生成UUID

[root@localhost mysql]# systemctl stop mysqld.service
[root@localhost mysql]# rm -rf /var/lib/mysql/auto.cnf 
[root@localhost mysql]# systemctl start mysqld.service

重新配置从库

mysql> stop slave;
mysql> reset slave all;
mysql> stop slave;
mysql> change master to master_host='192.168.25.128',master_user='root',master_password='myPassWord',master_log_file='mysql-bin.000002', master_log_file=154;
mysql> start slave;

重新测试,在master库中插入数据,slave0和slave1中的数据同步添加了,则说明真正的成功了。

上一篇下一篇

猜你喜欢

热点阅读