MySQL主从复制架构(异步复制)

目录

一、主从复制的原理​编辑

 二、主从复制的作用

三、实验准备 

四、实验过程 

 1、关闭master和slave上的防火墙和selinux

2、在master服务器上开启二进制日志

3、新建授权用户,用来让slave服务器去master服务器上获取二进制日志

4、在master服务器上刷新二进制日志,方便slave服务器记录和获取当前的位置号

5、在主从复制之前,保证master和slave上的数据是一致的

6、在slave服务器上配置master info

7、查看配置是否成功

8、启动slave

9、再次查看配置,并进行测试


一、主从复制的原理MySQL主从复制架构(异步复制)_第1张图片

         master服务器上开启二进制日志,当执行数据库内的数据的内容或者结构发生变化时,产生新的二进制日志,而后master服务器上的dump线程提醒slave服务器上的IO线程根据master.info去接收连接到的master发送的二进制日志。slave服务器得到二进制日志后,写入到自己的relay-log,slave上的SQL线程根据relay-log新产生的内容去重演,并将此次操作最后的位置号记录到relay-log.info文件中。

 二、主从复制的作用

1、主数据库出现问题,可以切换到从数据库。
2、可以进行数据库层面的读写分离。
3、可以在从数据库上进行日常备份。

三、实验准备 

准备两台全新的安装了MySQL的虚拟机

四、实验过程 

 1、关闭master和slave上的防火墙和selinux

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i '/^SELINUX/s/enforcing/disabled/' /etc/selinux/config

2、在master服务器上开启二进制日志

在MySQL的配置文件中,开启二进制日志功能(根据每个人的安装习惯,文件的位置不同)

[root@mysql mysql]# vim /etc/my.cnf #这里是我自己使用的地址
在[mysqld]条目下添加

#binary_log
log_bin
server_id = 1

3、新建授权用户,用来让slave服务器去master服务器上获取二进制日志

(在master服务器上)

root@san 16:23  mysql>grant replication slave on *.* to 'slave'@'192.168.56.%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)

4、在master服务器上刷新二进制日志,方便slave服务器记录和获取当前的位置号

root@san 16:47  mysql>flush logs;
Query OK, 0 rows affected (0.00 sec)

5、在主从复制之前,保证master和slave上的数据是一致的

#在master服务器上导出数据
[root@mysql mysql]# mysqldump -uroot -p'123456' --all-databases > /backup/all_db.sql 
mysqldump: [Warning] Using a password on the command line interface can be insecure.

#然后利用scp命令将导出的数据传输到slave上,导入数据库中
[root@mysql mysql]# scp /backup/all_db.sql [email protected]:/backup/
[email protected]'s password: 
all_db.sql                                                                                  100%  857KB  87.1MB/s   00:00  

[root@mysql2 mysql]# mysql -uroot -p'123456' < /backup/all_db.sql 
mysql: [Warning] Using a password on the command line interface can be insecure.

(至此,两台服务器上的基础数据就保持一致了)

6、在slave服务器上配置master info

root@san 16:57  mysql>CHANGE MASTER TO MASTER_HOST='192.168.56.128',
    -> MASTER_USER='slave',
    -> MASTER_PASSWORD='123456',
    -> MASTER_PORT=3306,
    -> MASTER_LOG_FILE='mysql-bin.000001',
    -> MASTER_LOG_POS=154;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

其中的MASTER_USER='slave'和 MASTER_PASSWORD='123456'为在master上授权过的用户;

CHANGE MASTER TO MASTER_HOST='192.168.56.128'为指定的master的IP

7、查看配置是否成功

root@san 16:57  mysql>show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: 
                  Master_Host: 192.168.56.128
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 154
               Relay_Log_File: mysql2-relay-bin.000001
                Relay_Log_Pos: 4
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: No
            Slave_SQL_Running: No

8、启动slave

root@san 16:59  mysql>stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

root@san 17:00  mysql>start slave;
Query OK, 0 rows affected (0.00 sec)

9、再次查看配置,并进行测试

root@san 16:57  mysql>show slave status\G;
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

测试在master上建库建表,是否slave上同步执行

你可能感兴趣的:(mysql,架构,数据库)