MySQL——主从复制

文章详细介绍了MySQL主从复制的原理,包括基于语句、行和混合类型的复制方式,以及主从复制的目的如灾备、负载平衡等。同时,文章提供了实现主从复制的步骤,包括在主服务器和从服务器上的配置,如启用二进制日志、设置唯一server-id、创建复制用户等,并给出了具体的Linux命令示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.理解MySQL主从复制原理。

2.完成MySQL主从复制。


1.理解MySQL主从复制原理。

1)MySQL支持的复制类型

(1)、基于语句( statement )的复制
        在主服务器上执行SQL 语句,在从服务器上执行同样的语句。 MySQL 默认采用基于语句的复制,效率比 较高。
(2)、基于行( row )的复制
        把改变的内容复制过去,而不是把命令在从服务器上执行一遍。从MySQL 5.0 开始支持。
(3)、混合型( mixed )的复制
        默认采用基于语句的复制,一旦发现基于语句的无法精确复制时,就会采用基于行的复制。
2) 、为什么要做主从复制
        灾备
        数据分布
        负载平衡
        读写分离
        提高并发能力

3)、主从复制原理

        主要基于MySQL 二进制日志
        主要包括三个线程(2 I/O 线程, 1 SQL 线程)
1 MySQL 将数据变化记录到二进制日志中;
2 Slave MySQL 的二进制日志拷贝到 Slave 的中继日志中;
3 Slave 将中继日志中的事件在做一次,将数据变化,反应到自身( Slave )的数据库

  • 主数据库有个bin-log二进制文件,记录了所有增删改Sql语句。(binlog线程)
  • 从数据库把主数据库的bin-log文件的sql语句复制过来。(io线程)
  • 从数据库的relay-log重做日志文件中再执行一次这些sql语句。(Sql执行线程)

4)、如何实现主从复制

        在主服务器(master )上
                (1)、启用二进制日志
                (2)、选择一个唯一的server-id
                (3)、创建具有复制权限的用户
        在从服务器(slave )上
                (1)、启用中继日志 (二进制日志可开启,也可不开启)
                (2)、选择一个唯一的server-id
                (3)、连接至主服务器,并开始复制

2.完成MySQL主从复制。

1)、主机环境

主节点 192.168.186.251 master

从节点 192.168.186.100 slave1

2)、环境准备

关闭防火墙

[root@master ~]# systemctl disable firewalld
关闭selinux

[root@master ~]# setenforce 0

时间同步

主、从服务器使用相同版本的mysql数据库

3)、主节点配置

(1)、启用二进制日志 ,并为当前节点设置一个全局唯一的ID号,然后创建目录修改权限

[root@master ~]# vim /etc/my.cnf
[mysqld]
log_bin = /data/logbin/mysql-bin
server_id = 1
[root@master ~]# mkdir /data
[root@master ~]# mkdir /data/logbin
[root@master ~]# chown mysql.mysql /data/logbin/

(2)、重新启动mysql服务

[root@master ~]# systemctl restart mysqld

 (3)、查看/data/logbin/目录是否有数据

[root@master ~]# ls /data/logbin
mysql-bin.000001  mysql-bin.index

 (4)、登录mysql,创建账号,账号授权

[root@master ~]# mysql -uroot -p123456

mysql5.7 [(none)]>create user wp@'192.168.186.%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)

mysql5.7 [(none)]>grant replication slave on *.* to wp@'192.168.186.%';
Query OK, 0 rows affected (0.01 sec)

mysql5.7 [(none)]>show grants for 'rep'@'192.168.186.%';
+---------------------------------------------------------+
| Grants for rep@192.168.186.%                            |
+---------------------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO 'rep'@'192.168.186.%' |
+---------------------------------------------------------+
1 row in set (0.00 sec)

(5)、锁表设置只读,查看主库状态

mysql5.7 [(none)]>flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)

mysql5.7 [(none)]>show variables like '%timeout%';
+-----------------------------+----------+
| Variable_name               | Value    |
+-----------------------------+----------+
| connect_timeout             | 10       |
| delayed_insert_timeout      | 300      |
| have_statement_timeout      | YES      |
| innodb_flush_log_at_timeout | 1        |
| innodb_lock_wait_timeout    | 50       |
| innodb_rollback_on_timeout  | OFF      |
| interactive_timeout         | 28800    |
| lock_wait_timeout           | 31536000 |
| net_read_timeout            | 30       |
| net_write_timeout           | 60       |
| rpl_stop_slave_timeout      | 31536000 |
| slave_net_timeout           | 60       |
| wait_timeout                | 28800    |
+-----------------------------+----------+
13 rows in set (0.00 sec)

mysql5.7 [(none)]>show master status;
+------------------+----------+--------------+------------------+------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                        |
+------------------+----------+--------------+------------------+------------------------------------------+
| mysql-bin.000001 |      607 |              |                  | 388ebd53-291b-11ee-b68c-000c29090543:1-3 |
+------------------+----------+--------------+------------------+------------------------------------------+
1 row in set (0.00 sec)

mysql5.7 [(none)]>\q
Bye

 (6)、备份数据库数据

[root@master backup]# mysqldump -uwp -p -A -B | gzip > /server/backup/mysql_bak.$(date +%F).sql.gz
Enter password: 
[root@master backup]# ll
total 4
-rw-r--r--. 1 root root 20 Jul 25 11:17 mysql_bak.2023-07-25.sql.gz

4)、从节点设置

(1)、设置全局唯一的ID号

[root@slave1 ~]# vim /etc/my.cnf

[mysqld]
server_id=2

5)、在主节点将备份的数据复制到从节点上,并在从节点查看

master:

[root@master ~]# scp /server/backup/mysql_bak.2023-07-25.sql.gz 192.168.186.100:/server/backup
The authenticity of host '192.168.186.100 (192.168.186.100)' can't be established.
ECDSA key fingerprint is SHA256:ZGkVpFFM8KD+H3SRgZmWUpD+IlNK9Dwqcd+TAiGoyzM.
ECDSA key fingerprint is MD5:c2:93:1c:0a:8e:e1:4e:86:cc:90:78:5d:81:42:76:aa.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.186.100' (ECDSA) to the list of known hosts.
root@192.168.186.100's password: 
mysql_bak.2023-07-25.sql.gz                               100%   20    21.8KB/s   00:00    

slave1:
[root@slave1 ~]# ll /server/backup/
总用量 4
-rw-r--r-- 1 root root 20 7月  25 23:35 mysql_bak.2023-07-25.sql.gz
[root@slave1 ~]# cd /server/backup/
[root@slave1 backup]# gzip -d mysql_bak.2023-07-25.sql.gz 
[root@slave1 backup]# ll
总用量 0
-rw-r--r-- 1 root root 0 7月  25 23:35 mysql_bak.2023-07-25.sql

6)、设定主从库同步

mysql> change master to
MASTER_HOST='192.168.186.251',
MASTER_PORT=3306,
MASTER_USER='wp',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000025',
MASTER_LOG_POS=194;

7)、启动主从库同步开关

mysql> start slave;
检查状态:
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: 
                  Master_Host: 192.168.186.251
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000025
          Read_Master_Log_Pos: 194
               Relay_Log_File: slave1-relay-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: mysql-bin.000025
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值