Mysql主从复制的一般步骤整理说明(异步复制)

Mysql主从复制配置比较简单,这里总结一下配置步骤和里面涉及的一下mysql小知识点,

Mysql主从复制常用的同步方式采用“异步”,当然还有“半同步”方式,这里我们总结下异步方式,半同步只需在异步基础上安装一个插件即可。

1.主库中开启log_bin
mysql> set global log_bin = on;
mysql> set global expire_logs_days = 5;

同步修改mysql的配置文件/etc/my.cnf

2.主库创建用于复制的用户
mysql> grant replication slave on *.* to 'rep'@'%' identified by 'rep123';

3.确保主从库上的server-id、server-uuid 都不一样
     server-id:/etc/my.cnf 文件中的配置参数
 server-uuid:Mysql5.6开始的参数,查看 /mysql数据目录/auto.cnf

如果 server-uuid 一样删除从库的auto.cnf重启Mysql系统后即可

4.确保主库3306端口可以访问
Linux防火墙开发3306端口:
编辑/etc/sysconfig/iptables文件,参考已经开发的22端口,
复制开发22端口的那条记录直接放到该条记录的下面,然后修改端口即可。
例如:
$> vi /etc/sysconfig/iptables 
......其他文字此处省略......
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
......其他文字此处省略......


添加完成后,重启防火墙即可。
$> service iptables restart

3.主库上 dump 当前的数据
$> mysqldump -uroot -proot123 
      -A -B -R -E 
      --triggers 
      --single-transaction 
      --skip-extended-insert  
      --net-buffer-length=1048576  
      --max-allowed-packet=33554432
      --master-data=1 |gzip >/opt/all.sql.gz

########### MYSQLDUMP 参数总结 #############
   -B  指定多个库,增加建库的语句和use语句
   -A  备份所有库
   --master-data  增加binlog日志文件名以及对应的位置点  
                          1: 从库创建备份的时候即可不用指定主库binglog位置点
   -x, --lock-all-tables
   -l, --lock-table  Lock all tables for read
   -d  只备份表结构
   -t   只备份数据
   --single-transaction  适合innodb事务数据库备份,在导出过程中不能有DDL的SQL语句
   --triggers 所有的触发器
   -R, --routines  自定义的函数和存储过程
   --max-allowed-packet=# 客户端/服务器之间通信的缓存区的最大大小;

   --net-buffer-length=# TCP/IP和套接字通信缓冲区大小,创建长度达net_buffer_length的行。

注意:

max_allowed_packet和net_buffer_length不能比目标数据库的设定数值 大,

否则可能出错。这两个参数将大大加快导入的速度。

   -e, --extended-insert  Use multiple-row INSERT syntax that include severalVALUES lists.
                         (Defaults to on; use --skip-extended-insert to disable.)
######### MYSQLDUMP 参数总结 ################

4.如果从库不需要级联复制且无需binlog则关闭从库的log_bin参数,
  如果要级联复制则需要打开log_slave_update参数和log_bin参数。


5.如果导出主库数据时没加--master-data=1或该参数值不为1执行下面步骤:
(1) 确保刚才导出数据时到目前为止主库没有DDL语句执行,然后查看主库目前的状态。
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 |      338 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

(2) 在从库上导入主库导出的数据

(3) 在从库上配置相关认证信息
例如登陆到从库中:
mysql> CHANGE MASTER TO 
   MASTER_HOST='主库IP地址', 
   MASTER_PORT=3306,
   MASTER_USER='rep',
   MASTER_PASSWORD='rep123',
   MASTER_LOG_FILE='mysql-bin.000003',
   MASTER_LOG_POS=338;


6.如果导出主库数据时加--master-data=1执行下面步骤:
(1) 在从库配置相关认证信息
例如登陆到从库中:
mysql> CHANGE MASTER TO 
   MASTER_HOST='主库IP地址', 
   MASTER_PORT=3306,
   MASTER_USER='rep',
   MASTER_PASSWORD='rep123';


(2) 在从库上导入主库导出的数据

7.从库上开启 slave 
mysql> start slave

8. 查看slave 状态是否有错误信息,至此配置完成。

mysql> show slave status\G;


##########################################################
主从复制的原理过程:
 【MASTER库】                         【SLAVE库】
  IO线程                                         SQL线程 、IO线程
  mysql-bin.000001
  mysql-bin.000002                       change master to....
  ......                                              start slave; 开启同步
 主库增删改会写入binlog             从库IO拉取binlog

 从库IO线程向主库发起请求,主库验证相关认证信息,
 认证通过后主库IO线程向从库写中继日志relay-log,
 并且更新maste.info的位置点。
 当写relay-log时,从库SQL线程就将relay-log日志转换为sql语句更新从库数据

主从复制的原理要点:
  (1)MYSQL主从复制是异步同步
  (2)逻辑同步模式,多种模式
  (3)主库通过记录 binlog实现对从库的同步
  (4)从库文件 master.info -->记录了changeMaster信息, relay-log(中继日志), 
           relay-info SQL线程使用的进程,binlog应用到数据中的位置点
  (5)主库一个线程,从库2个线程来完成
  (6)如果从库还想级联从库,需要打开log-bin 和 log-slave-updates参数
           my.cnf 文件中 expire-log-days=7 表示binlog保存近7天的文件。

########################################################


你可能感兴趣的:(mysql,异步,mysql,主从,同步,复制)