MySQL主从介绍,配置主服务器,配置从服务器,实现主从同步

Posted 智能化IT系统

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL主从介绍,配置主服务器,配置从服务器,实现主从同步相关的知识,希望对你有一定的参考价值。

mysql主从配置

17.1 MySQL主从介绍

MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步。
MySQL主从是基于binlog的,主上须开启binlog才能进行主从。

主从过程

  1. 主将更改操作记录到binlog中

  2. 从将主的binlog事件(SQL语句)同步到本机并记录在relaylog中

  3. 从根据relaylog里面的SQL语句按顺序执行

说明: 该过程有三个线程,主上有一个log dump线程,用来和从的i/o线程传递binlog;从上有两个线程,其中i/o线程用来同步主的binlog并生成relaylog,另外一个SQL线程用来把relaylog里面的SQL语句落地。

工作原理

应用环境

  1. 备份重要数据

  2. 分担主库数据读取压力


准备工作

安装并启动MySQL服务。


 配置主服务器

编辑配置文件添加如下参数:


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

  2. ……

  3. server-id=132

  4. #自定义

  5. log_bin=linux1

  6. #指定log前缀

编辑完成后重启mysql服务:


  
    
    
  
  1. [root@123 ~]# /etc/init.d/mysqld restart

  2. Shutting down MySQL...... SUCCESS!

  3. Starting MySQL.................. SUCCESS!

查看mysql库文件:


  
    
    
  
  1. [root@123 ~]# ls -lt /data/mysql/

  2. ……

  3. -rw-rw----  1 mysql mysql       20 8月  30 15:52 linux1.index

  4. -rw-rw----  1 mysql mysql      120 8月  30 15:52 linux1.000001

  5. ……

说明: 重启后生成两个前缀为adailinux1的二进制文件。

新建一个数据库为试验做准备:


  
    
    
  
  1. [root@123 ~]# cd /data/mysql/

  2. 备份一个数据库:

  3. [root@123 mysql]# mysqldump -uroot -p123456 zrlog > /tmp/zrlog.sql

  4. 新建一个数据库:

  5. [root@123 mysql]# mysql -uroot -p123456 -e "create database test"

  6. 将备份的数据恢复到新建的数据库中:

  7. [root@123 mysql]# mysql -uroot -p123456 test < /tmp/zrlog.sql

创建一个用于同步数据的用户:


  
    
    
  
  1. [root@123 mysql]# mysql -uroot -p123456

  2. Welcome to the MySQL monitor.

  3. mysql> grant replication slave on *.* to 'repl'@'192.168.8.130' identified by '123456';

  4. Query OK, 0 rows affected (0.01 sec)

  5. #IP为“从”的IP

  6. mysql> flush tables with read lock;

  7. Query OK, 0 rows affected (0.12 sec)

  8. #锁定数据表(目的是暂时使其不能继续写,保持现有状态用于同步)

  9. mysql> show master status;

  10. +-------------------+----------+--------------+------------------+-------------------+

  11. | File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

  12. +-------------------+----------+--------------+------------------+-------------------+

  13. |     linux1.000001 |    10844 |              |                  |                   |

  14. +-------------------+----------+--------------+------------------+-------------------+

  15. 1 row in set (0.00 sec)

  16. #记住file和position(设置主从同步时会使用)

  17. mysql> quit

  18. Bye

备份主库中所有数据库:


  
    
    
  
  1. [root@123 mysql]# mysqldump -uroot -p123456 linux > /tmp/linux.sql

  2. [root@123 mysql]# mysqldump -uroot -p123456 linux2 > /tmp/linux2.sql


配置从服务器

编辑配置文件:


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

  2. ……

  3. server-id=130

  4. ……

  5. [root@localhost ~]# /etc/init.d/mysqld restart

  6. Shutting down MySQL...... SUCCESS!

  7. Starting MySQL.............................. SUCCESS!

说明: 从的server-id要和主的server-id不同。

配置完成后将主中备份的数据发送到从中:


  
    
    
  
  1. [root@localhost ~]# scp 192.168.8.132:/tmp/*.sql /tmp/

  2. The authenticity of host '192.168.8.132 (192.168.8.132)' can't be established.

  3. ECDSA key fingerprint is 78:22:19:9e:d5:4a:9d:cb:71:54:d7:c0:9a:13:18:9c.

  4. Are you sure you want to continue connecting (yes/no)? yes

  5. Warning: Permanently added '192.168.8.132' (ECDSA) to the list of known hosts.

  6. root@192.168.8.132's password:

  7. alinux2.sql                                             100% 1259     1.2KB/s   00:00    

  8. linux.sql                                              100% 1258     1.2KB/s   00:00    

  9. zrlog.sql                                             100% 9864     9.6KB/s   00:00  

创建库:


  
    
    
  
  1. [root@localhost ~]# mysql -uroot

  2. Welcome to the MySQL monitor.

  3. mysql> create database linux;

  4. Query OK, 1 row affected (0.03 sec)

  5. mysql> create database linux2;

  6. Query OK, 1 row affected (0.00 sec)

  7. mysql> create database zrlog;

  8. Query OK, 1 row affected (0.00 sec)

  9. mysql> quit

  10. Bye

恢复数据库:


  
    
    
  
  1. [root@localhost ~]# mysql -uroot linux < /tmp/linux.sql

  2. [root@localhost ~]# mysql -uroot linux2 < /tmp/linux2.sql

  3. [root@localhost ~]# mysql -uroot zrlog < /tmp/zrlog.sql

注意: 该过程要保证主从数据库内容的一致。

实现主从同步


  
    
    
  
  1. [root@localhost ~]# mysql -uroot

  2. Welcome to the MySQL monitor.

  3. mysql> stop slave;

  4. Query OK, 0 rows affected, 1 warning (0.06 sec)

  5. mysql> change master to master_host='192.168.8.132',master_user='repl',master_password='123456',master_log_file='linux1.000001',master_log_pos=10844;

  6. Query OK, 0 rows affected, 2 warnings (0.46 sec)

  7. #IP为主的IP;file、pos分别为主的filename和position。

  8. 检测主从是否建立成功:

  9. mysql> start slave;

  10. Query OK, 0 rows affected (0.22 sec)

  11. mysql> show slave status\G

  12. Slave_IO_Running: Yes

  13. Slave_SQL_Running: Yes

  14. Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it

以上操作完成后,解锁主库的表(在主上操作):


  
    
    
  
  1. [root@123 mysql]# mysql -uroot -p123456

  2. Welcome to the MySQL monitor.

  3. mysql> unlock tables;

  4. Query OK, 0 rows affected (0.00 sec)

至此主从配置搭建完成!!!


测试主从

参数介绍


  
    
    
  
  1. 主服务器:

  2. binlog-do-db=   仅同步指定的库

  3. binlog-ignore-db=    忽略指定的库

  4. 从服务器:

  5. replicate_do_db=    同步指定的库

  6. replicate_ignore_db=  忽略指定的库

  7. replicate_do_table=    同步指定的表

  8. replicate_ignore_table=   忽略指定的表

  9. replicate_wild_do_table=  如aming.%,支持通配符

  10. replicate_wild_ignore_table=

注: 进行从服务器的配置时尽量使用参数“replicate_wild_”,使匹配更精确,提升使用性能。

测试

主服务器:


  
    
    
  
  1. mysql> show tables;

  2. +---------------------------+

  3. | Tables_in_adaitest        |

  4. +---------------------------+

  5. | columns_priv              |

  6. | db                        |

  7. | event                     |

  8. +---------------------------+

  9. 删除表:

  10. mysql> drop table db;

  11. mysql> show tables;

  12. +---------------------------+

  13. | Tables_in_adaitest        |

  14. +---------------------------+

  15. | columns_priv              |

  16. | event                     |

  17. +---------------------------+

从服务器:


  
    
    
  
  1. 主服务器删除表之前:

  2. mysql> show tables;

  3. +---------------------------+

  4. | Tables_in_adaitest        |

  5. +---------------------------+

  6. | columns_priv              |

  7. | db                        |

  8. | event                     |

  9. +---------------------------+

  10. 主服务器删除表之后:

  11. mysql> show tables;

  12. +---------------------------+

  13. | Tables_in_adaitest        |

  14. +---------------------------+

  15. | columns_priv              |

  16. | event                     |

  17. +---------------------------+

即,主从配置成功!


以上是关于MySQL主从介绍,配置主服务器,配置从服务器,实现主从同步的主要内容,如果未能解决你的问题,请参考以下文章

17.1 MySQL主从介绍17.2 准备工作17.3 配置主17.4 配置从17.5 测试主从同步

MySQL主从介绍准备工作配置主配置从测试主从同步

17.1 MySQL主从介绍 17.2 准备工作 17.3 配置主 17.4 配置从 17.5 测试主从同步

MySQL的主从复制介绍及配置

MySQL主从复制原理配置

MySQL主从复制的原理及配置方法(比较详细)