mysql5.7主从搭建

mysql下主从(主主)搭建

首先要准备两台服务器,一台主服务器(Master),另一台从服务器(Slave),然后要保证Master与Slave的版本要相同且Master不能高于Slave的版本,一般稳健的做法都是使其版本相同,因为MySQL不同版本之间的binlog(二进制日志)格式可能会不一样,最后会导致同步出现异常。

参考地址:https://blog.51cto.com/moerjinrong/2133121

环境

软件环境

系统:CentOS 7.3
MySQL版本:5.7.33

主机设置:

IP

主机名

角色

10.10.133.47

master-jin

master

10.10.133.48

node1-jin

slave

二、Mysql主从基本原理

Mysql的主从同步就是当master(主库)发生数据变化的时候,会实时同步到slave(从库)。
主从复制可以水平扩展数据库的负载能力,容错,高可用,数据备份。
不管是delete、update、insert,还是创建函数、存储过程,都是在master上,当master有操作的时候,slace会快速的接受到这些操作,从而做同步。

主要的实现原理

在master机器上,主从同步时间会被写道特殊的log文件中(binary-log);

在slave机器上,slave读取主从同步事件,并根据读取的事件变化,在slave库上做相应的更改。

详细的主从同步主要有三种形式:statement、row、mixed

  • statement:会将对数据库操作的sql语句写道binlog中
  • row:会将每一条数据的变化写道binlog中。
  • mixed:statement与row的混合。Mysql决定什么时候写statement格式的,什么时候写row格式的binlog。

在master机器上的操作:

当master上的数据发生变化的时候,该事件变化会按照顺序写入binlog中。当slave链接到master的时候,master机器会为slave开启binlog dunp线程。当master的binlog发生变化的时候,binlog dump线程会通知slave,并将相应的binlog内容发送给slave。

在slave机器上操作:

当主从同步开启的时候,slave上会创建两个线程:I\O线程。该线程连接到master机器,master机器上的binlog dump 线程会将binlog的内容发送给该I\O线程。该I/O线程接收到binlog内容后,再将内容写入到本地的relay log;sql线程。该线程读取到I/O线程写入的ralay log。并且根据relay log。并且根据relay log 的内容对slave数据库做相应的操作。

主从配置

  1. master配置文件设置

vim /etc/my.cnf

在[mysqld]下添加以下配置

#主从配置(master的配置)

server-id=1 # 服务器id (设置唯一标识)

binlog-do-db=UMS # 要给从机同步的库

binlog-ignore-db=mysql # 不给从机同步的库(多个写多行)

binlog-ignore-db=information_schema

binlog-ignore-db=performance_schema

binlog-ignore-db=sys

log-bin=mysql-bin # 打开日志(主机需要打开),可以指定绝对路径;

expire_logs_days=30 # 自动清理 30 天前的log文件,可根据需要修改

  1. slave配置文件设置

vim /etc/my.cnf

在[mysqld]下添加以下配置

#主从配置(slave配置)

server-id=2 # MySQLid 后面2个从服务器需设置不同

skip_slave_start=1 # 复制进程不会随着数据库的启动而启动,重启数据库后需手动启动;

#加上以下参数可以避免更新不及时,SLAVE 重启后导致的主从复制出错。

read_only = 1 # 从库普通账户只读;

master_info_repository=TABLE

relay_log_info_repository=TABLE

  1. 重启mysql生效配置

/etc/init.d/mysql restart

  1. master数据库中建立主从同步账号umpay

umpay为用户名,%表示任何远程地址,如下表示密码为'umpay'的10.10.133段地址的umpay都可以连接master主机,密码为umpay2010。

mysql> grant replication slave on *.* to 'umpay'@'10.10.133.%' identified by 'umpay2010' ; # 创建同步账户

mysql> flush privileges; # 刷新权限

mysql> select Host,User,authentication_string from mysql.user; # 检查是否创建

  1. master数据库事件查看

mysql> show master status \G

*************************** 1. row ***************************

File: mysql-bin.000001

Position: 771

Binlog_Do_DB: UMS

Binlog_Ignore_DB: mysql,information_schema,performance_schema,sys

Executed_Gtid_Set:

1 row in set (0.00 sec)

查看主服务器上当前的二进制日志名和偏移量值,在slave连接时需要用到

File: mysql-bin.000001和Position: 771

  1. slave连接主库

在slave尝试连接主库的授权用户是否可以连通

mysql -h 10.10.133.147 -u umpay -p

mysql>change master to master_host='10.10.133.147',master_port='3508',master_user='umpay', master_password='umpay2010', master_log_file='mysql-bin.000001', master_log_pos=771;

Query OK, 0 rows affected, 1 warning (0.31 sec)

mysql> start slave;

Query OK, 0 rows affected (0.00 sec)

mysql> show slave status \G

查看到以下值为YES,则主从搭建成功。

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

  1. 测试

在master上执行

mysql> create schema UMS default character set utf8 collate utf8_general_ci;

mysql> use UMS;

mysql> create table test001(id int auto_increment primary key,name varchar(20) not null);

mysql> insert into test001 values(null,'will');

mysql> insert into test001 values(null,'jim');

mysql> insert into test001 values(null,'tom');

在slave上查看

mysql> select * from UMS.test001;

+----+------+

| id | name |

+----+------+

| 1 | will |

| 2 | jim |

| 3 | tom |

+----+------+

3 rows in set (0.00 sec)

posted @   小白不怕黑  阅读(360)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示