一看就会的Mysql 主从复制(MySQL Replication)实战!

前言

MySQL主从复制可以将一个MySQL数据库服务器(主服务器)的数据复制到一个或多个MySQL数据库服务器(从服务器)。

MySQL复制的优点包括:

  • 横向扩展解决方案-在多个副本之间分散负载以提高性能。在这种环境下,所有写入和更新都必须在复制源服务器(主服务器)上进行。但是,读取可能发生在一个或多个副本(从服务器)上。该模型可以提高写入性能(因为源专用于更新),同时可以在越来越多的副本中显着提高读取速度。
  • 数据安全性-因为数据已复制到副本,并且副本可以暂停复制过程,所以可以在副本上运行备份服务而不会破坏相应的源数据。
  • 分析-可以在源上创建实时数据,而信息分析可以在副本上进行,而不会影响源的性能。
  • 远程数据分发-您可以使用复制来创建数据的本地副本以供远程站点使用,而无需永久访问源。

实战

下面我就用两个虚拟机来实现MySQL的主从复制

主虚拟机:192.168.91.128

从虚拟机:192.168.91.130

前提:两个虚拟机都安装有MySQL,我MySQL的版本为5.7.24,且两个虚拟机的网络是可以ping通的

主服务器配置

1、修改主服务器上MySQL的配置文件,开启二进制日志文件,配置server-id

编辑MySQL配置文件,Linux的MySQL默认配置文件默认my.cnf,一般是在/etc/下

vi  /etc/my.cnf 

添加内容如下:

#在配置文件的[mysqld]部分添加以下两个配置
[mysqld]
#设置server-id,这个server-id主从服务器必须不一样
server-id=1
#开启二进制日志,mysql-bin为日志名称,你可以自定义名称
log-bin=mysql-bin

注:如果不知道my.cnf文件在哪,可以使用find / -name my.cnf命令进行搜索

除了上面的两个必要配置,我们还可以根据自己的实际情况,来设置sync_binlog、innodb_flush_log_trx_commit等配置

修改完配置后需要重启下服务器


2、在主服务器上添加一个用于同步的账号

命令如下:

mysql> grant replication slave on *.* to 'slave'@'%' identified by 'slave';

命令说明

replication slave:表示分配的权限,replication slave为复制的权限

*.*:表示可以操作哪些数据库,*.*表示所有数据库的所有表

slave@'%':slave表示这个账号的名称,'%'为在哪些网络可以使用,'%'为可以在所有网络上使用,除了使用'%',我们还可以指定某个ip,比如192.168.91.128

identified by后填的是密码

3、查看主服务器最新的二进制日志文件和position点,记录下来,在从服务器需要使用

命令

mysql> show master status;

实例:


mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000008 |      438 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.03 sec)

主从复制只会复制在主从配置之后的修改,所以如果之前在主数据库有数据,我们还需要将数据复制到从数据库中,最简单的方法就是用mysqldump 创建要复制的所有数据库的转储。

有关mysqldump的使用,大家可以参考:
https://blog.csdn.net/qq_36551991/article/details/111409411.


从服务器配置

1、修改从服务器上MySQL的配置文件,配置server-id即可,从服务器开不开启二进制日志都可以

命令:

vi  /etc/my.cnf 

内容:

[mysqld]
#配置server-id,server-id必须与主服务器和其他从服务器的不一样,即需要唯一
server-id=2

除了server-id这个必须配置,其他看实际情况来配置

2、配置主从复制

命令如下

mysql> CHANGE MASTER TO
    -> MASTER_HOST='192.168.91.128',
    -> MASTER_USER='slave',
    -> MASTER_PASSWORD='slave',
    -> MASTER_LOG_FILE='mysql-bin.000008',
    -> MASTER_LOG_POS=438;

命令说明:

MASTER_HOST : 设置要连接的主服务器的ip地址
MASTER_USER : 设置要连接的主服务器的用户名
MASTER_PASSWORD : 设置要连接的主服务器的密码
MASTER_LOG_FILE : 设置要连接的主服务器的bin日志的日志名称,即我们在主服务器show master status命令得到的file参数
MASTER_LOG_POS : 设置要连接的主服务器的bin日志的记录位置,即我们在主服务器show master status命令得到的Position 参数

3、配置完成,启动主从复制:

命令:

start slave;

例:

mysql> start slave;

4、查看配置是否成功

命令:show slave status\G

实例:

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.91.128
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000008
          Read_Master_Log_Pos: 438
               Relay_Log_File: local-relay-bin.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000008
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

主要看返回信息的Slave_IO_Running和 Slave_SQL_Running状态是否都为Yes,都为Yes则为正常(Slave_IO_Running和 Slave_SQL_Running表示MySQL的两个复制线程)

测试主从复制

我们在主服务器的MySQL上创建个新表,并插入数据,看从服务器是否会复制

#在主数据库创建个新表,并插入一条数据
mysql> CREATE TABLE test_table( id INT NOT NULL AUTO_INCREMENT, name varchar(50), PRIMARY KEY(id));
Query OK, 0 rows affected (0.23 sec)
mysql> insert into test_table(name) values('h');
Query OK, 1 row affected (0.15 sec)

在navicat上查看从服务器,如果从服务器也出现对应的新表和数据,那么主从复制成功

猜你喜欢

转载自blog.csdn.net/qq_36551991/article/details/111462625