主从同步-mysql

2022/7/25 2:23:10

本文主要是介绍主从同步-mysql,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录
  • MySQL主从同步机制
    • MySQL主从同步的作用
    • 实现MySQL主从复制需要进行的配置:
  • 前期准备
  • 主服务器配置
  • 从服务器配置
  • 报错处理

MySQL主从同步机制

MYSQL主从同步是在MySQL主从复制(Master-Slave Replication)基础上实现的,通过设置在Master MySQL上的binlog(使其处于打开状态),Slave MySQL上通过一个I/O线程从Master MySQL上读取binlog,然后传输到Slave MySQL的中继日志中,然后Slave MySQL的SQL线程从中继日志中读取中继日志,然后应用到Slave MySQL的数据库中。这样实现了主从数据同步功能。

MySQL主从同步的作用

1、可以作为一种备份机制,相当于热备份
2、可以用来做读写分离,均衡数据库负载

实现MySQL主从复制需要进行的配置:

1.主服务器:
开启二进制日志
配置唯一的server-id
获得master二进制日志文件名及位置
创建一个用于slave和master通信的用户账号
2.从服务器:
配置唯一的server-id
使用master分配的用户账号读取master二进制日志
启用slave服务

前期准备

准备两台数据库版本一致(建议版本5.5以上)的mysql服务器

(如果是虚拟机的话可以先装好一台,然后克隆一台)

db1 192.168.64.134 主

db2 192.168.64.138 从

主服务器配置

1.修改my.cnf配置
前两行 my.cnf中默认有

[mysqld]
log-bin=mysql-bin #开启二进制日志
server-id=1 #设置server-id

# master开启二进制日志后默认记录所有库所有表的操作,可以通过配置来指定只记录指定的数据库甚至指定的表的操作

# 不同步哪些数据库  
# binlog-ignore-db = mysql  
# binlog-ignore-db = test  
# binlog-ignore-db = information_schema  

# 只同步哪些数据库,除此之外,其他不同步  
binlog-do-db=test

image

修改好后,重启mysql服务

2.创建用于同步的用户账号

-- 创建用户
create user 'rep'@'192.168.64.%' identified by '12345678';
-- 授权
GRANT REPLICATION SLAVE ON *.* TO 'rep'@'192.168.64.%';
-- 刷新权限
flush privileges;
-- 查看授权信息
show grants for 'rep'@'192.168.64.%';

-- grant replication slave on *.* to 'rep'@'192.168.64.%' identified by '12345678';

-- 有异常的话可以删除用户
-- drop user 'rep'@'192.168.64.%';

image

mysql> show grants for 'rep'@'192.168.64.%';
+---------------------------------------------------------------------------------------------------------------------------+
| Grants for rep@192.168.64.%                                                                                               |
+---------------------------------------------------------------------------------------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO 'rep'@'192.168.64.%' IDENTIFIED BY PASSWORD '*84AAC12F54AB666ECFC2A83C676908C8BBC381B1' |
+---------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

3.查看master状态,记录二进制文件名(mysql-bin.000010)和位置(107)

mysql> show master status ;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000010 |      107 | test         |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

从服务器配置

1.修改my.cnf

server-id=2
log-bin=mysql-bin

image

修改完成之后,重启mysql服务

2.执行同步sql,配置同步配置
(需要主服务器IP(或主机名),登陆凭据,二进制文件的名称和位置)

CHANGE MASTER TO
MASTER_HOST='192.168.64.134',
MASTER_USER='rep',
MASTER_PASSWORD='12345678',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000010',
MASTER_LOG_POS=107;

3.启动同步sql

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

4.查看同步状态

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.64.134
                  Master_User: rep
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000010
          Read_Master_Log_Pos: 107
               Relay_Log_File: db2-relay-bin.000002
                Relay_Log_Pos: 253
        Relay_Master_Log_File: mysql-bin.000010
             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: 107
              Relay_Log_Space: 407
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
1 row in set (0.00 sec)
mysql>

当Slave_IO_Running和Slave_SQL_Running都为YES的时候就表示主从同步设置成功了
image

报错处理

搞不定了直接 重装mysql 或 回滚 快照。

ERROR 1665(HY000)

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor
应该是 已经创建过用户了,需要先刷新权限,然后删除重建用户。



这篇关于主从同步-mysql的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程