MySQL 5.7 主从复制

主从复制概念

MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。

主从复制模式

  1. 一主一从

  一主一从和一主多从是最常见的主从架构,实施起来简单并且有效,不仅可以实现HA,而且还能读写分离,进而提升集群的并发能力。

  1. 多主一从

  多主一从可以将多个mysql数据库备份到一台存储性能比较好的服务器上。

  1. 双主复制

双主复制,也就是互做主从复制,每个master既是master,又是另外一台服务器的slave。这样任何一方所做的变更,都会通过复制应用到另外一方的数据库中。

  1. 级联复制

  级联复制模式下,部分slave的数据同步不连接主节点,而是连接从节点。因为如果主节点有太多的从节点,就会损耗一部分性能用于replication,那么我们可以让3~5个从节点连接主节点,其它从节点作为二级或者三级与从节点连接,这样不仅可以缓解主节点的压力,并且对数据一致性没有负面影响。

实现步骤

  1. 配置主库

  • 编辑主库my.cnf (vi /etc/my.cnf)

[mysqld]

datadir=/usr/local/mysql/data
port = 3306
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
symbolic-links=0
max_connections=400
innodb_file_per_table=1
#表名大小写不明感,敏感为
lower_case_table_names=1

user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
# 开启binlog
log-bin=mysql-bin
# 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog-format=ROW
# 需要保证唯一性 不可与其他从服务器相同 如果为0会拒绝所有从服务器连接
server_id=1 
# 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days = 10
# 日志最大大小
max_binlog_size = 100M
# 需要写binlog的数据库
binlog_do_db = firecontrol  
# 不需要写binlog的数据库
binlog_ignore_db = mysql 
# 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
# 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
  • 重启主库mysql (service mysql restart),进入mysql控制台 (mysql -uroot -p)

# 创建一个用户用来给从库复制用
mysql> CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
# 查看主库参数 ,记住 File 和 Position 对应的参数,从库需要配置这些参数
mysql>  show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 |     2336 | firecontrol  | mysql            |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
  1. 配置从库

  • 编辑主库my.cnf (vi /etc/my.cnf)

[mysqld]

datadir=/usr/local/mysql/data
port = 3306
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
symbolic-links=0
max_connections=400
innodb_file_per_table=1
#表名大小写不明感,敏感为
lower_case_table_names=1

user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
# 开启binlog
log-bin=mysql-bin
# 主从复制的格式(mixed,statement,row,默认格式是statement)
binlog-format=ROW
# server_id不要重复
# 需要保证唯一性 不可与其他从服务器相同 如果为0会拒绝所有从服务器连接
server_id=2
# 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days = 10
# 日志最大大小
max_binlog_size = 100M
# 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
# 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
  • 重启从库mysql (service mysql restart),进入mysql控制台 (mysql -uroot -p)

# 配置主库,master_log_file 对应上面 File, master_log_pos 对应 Position
mysql> change master to master_host='192.168.1.15', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos=2336, master_connect_retry=30;
# 开启主从复制
mysql> start slave;
# 查看主从复制状态,主要看下Slave_IO_Running、Slave_SQL_Running是不是全是yes,否,上面参数配置有问题
mysql> show slave status \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.15
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 30
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 3063
               Relay_Log_File: localhost-relay-bin.000003
                Relay_Log_Pos: 3229
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  1. 验证主从复制

在主库中执行增、删、改语句,看从库数据是不是也改变,收工

你可能感兴趣的:(点滴汇聚,MySQL,mysql)