Mysql 主从配置


Mysql 主从配置

一、介绍

MySQL 主从又叫做 Replication、AB 复制。简单讲就是 A 和 B 两台机器做主从后,在 A 上写数据,另外一台 B 也会跟着写数据,两者数据实时同步的 MySQL 主从是基于 binlog 的,主上须开启 binlog 才能进行主从。

主从过程大致有 3 个步骤:

1.Master将更改操作记录到binlog
1.SlaveMasterbinlog事件(sql 语句)同步到从本机上并记录在relaylog
1.Slave根据relaylog里面的sql 语句按顺序执行,Master上有一个log dump线程,用来和SlaveI/O线程传递binlogSlave上有两个线程,其中 I/O 线程用来同步Masterbinlog并生成relaylog,另外一个SQL线程用来把relaylog里面的sql语句落地

image.png

它的一般应用场景有

  • 数据的备份
  • 读写分离

二、mysql 主从搭建

服务器准备

作用 IP 数据库
Master 192.168.2.8 MySQL 5.7
Slave 192.168.2.9 MySQL 5.7

检查 UUID

MasterSlave必须具有不同的UUID,才能实现主从同步。
查看 UUIDcat /var/lib/mysql/auto.cnf
如果UUID相同则必须先修改UUID然后重启MySQL

配置 Master

修改配置文件 vim /etc/my.cnf

server-id = 1     # 与 slave 的不相等
log-bin=mysqlbin  # 开启二进制日志功能,可以随便取
binlog-do-db=db1  # 针对某个数据库同步,用“,”隔开多个数据库,或者binlog-ignore-db=mysql #指定库不同步

重启服务

systemctl restart mysqld
# OR
service mysqld restart

登录 Master 数据库进行配置

  1. 配置 Slave
grant replication slave on *.* to 'repl'@'192.168.2.9' identified by '123456';
  1. 开启读锁,从主上配置结束后要解锁
flush tables with read lock;
  1. 查看 Master 信息
show master status;

完整执行过程如下:

root:(none)> grant replication slave on *.* to 'repl'@'192.168.2.9' identified by '123456';
Query OK, 0 rows affected
Time: 0.003s
root:(none)> flush tables with read lock;
Query OK, 0 rows affected
Time: 0.002s
root:(none)> show master status;
+-----------------+----------+--------------+------------------+-------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| mysqlbin.000001 | 447      | db1          |                  |                   |
+-----------------+----------+--------------+------------------+-------------------+

1 row in set
Time: 0.010s

配置 Slave

修改配置文件 vim /etc/my.cnf

server-id=2         # 与 master 的不相等
relay_log=relaybin  # 配置中继日志
binlog-do-db=db1    # 针对某个数据库同步,用“,”隔开多个数据库,或者binlog-ignore-db=mysql #指定库不同步

重启服务

systemctl restart mysqld
# OR
service mysqld restart

登录 Slave 数据库进行配置

  1. 先停止主从
stop slave;
// OR
slave stop;
  1. 关键一步,根据 Mastershow master status 显示的信息进行配置
    1. master_host :Master 的地址
    2. master_port:Master 的端口号
    3. master_user:用于数据同步的用户
    4. master_password:用于同步的用户的密码
    5. master_log_file:指定 Slave 从哪个日志文件开始复制数据
    6. master_log_pos:从哪个 Position 开始读 ​
change master to master_host='192.168.2.8',master_port=3306,master_user='repl',master_password='123456',master_log_file='mysqlbin.000001',master_log_pos=447;
  1. 开启 Slave
start slave;
  1. 查看 Slave 状态
show slave status\G;

两个 yes 表示成功

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

完整执行过程如下:

root:(none)> stop slave;
Query OK, 0 rows affected
Time: 0.002s
root:(none)> change master to master_host='192.168.2.8', master_user='repl', master_password='123456'
          -> , master_port=3306, master_log_file='mysqlbin.000001', master_log_pos=447;
Query OK, 0 rows affected
Time: 0.006s
root:(none)> start slave;
Query OK, 0 rows affected
Time: 0.003s
root:(none)> show slave status \G;
***************************[ 1. row ]***************************
Slave_IO_State                |
Master_Host                   | 192.168.2.8
Master_User                   | repl
Master_Port                   | 3306
Connect_Retry                 | 30
Master_Log_File               | mysqlbin.000001
Read_Master_Log_Pos           | 447
Relay_Log_File                | relaybin.000001
Relay_Log_Pos                 | 4
Relay_Master_Log_File         | mysqlbin.000001
Slave_IO_Running              | Yes
Slave_SQL_Running             | Yes
Replicate_Do_DB               |
Replicate_Ignore_DB           |
Replicate_Do_Table            |
Replicate_Ignore_Table        |
Replicate_Wild_Do_Table       |
Replicate_Wild_Ignore_Table   |
Last_Errno                    | 0
Last_Error                    |
Skip_Counter                  | 0
Exec_Master_Log_Pos           | 447
1 row in set
Time: 0.004s

三、主从的修复

重启 Slave

> stop slave;
> start slave;

查看 MySQL 日志

cat /var/log/mysqld.log

如果以上的方法不成功,就只能重新作主从了。


文章作者: Truda
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Truda !
评论
  目录