MySQL的主从复制配置

来源:互联网 发布:知乎 usb光驱 编辑:程序博客网 时间:2024/06/05 21:14
一 Mysql主从复制简介
   1.基本原理
       Mysql服务器之间的复制是基于二进制日志机制的。在主服务器上,Mysql在执行命令的同时会生成一个操作事件日志写入二进制文件(主服务器要开启二进制日志功能),而从服务器则负责读取主服务器的二进制日志,并在从服务器上重新执行该事件,从而是数据复制到本机。
       实现复制过程需三个线程完成:Master的IO线程,Slave的IO和SQL线程。
       1.Slave的IO线程连接Master,请求从指定文件指定位置或最开始位置之后的日志内容。
       2.Matser在接收到Slave的IO线程后,通过自身的IO线程读取对应日志信息,并返回给Slave的IO线程。(返回信息还包括Binary Log名称及位置)
       3.Slave的IO线程获取信息后,依次写入Slave端的Relay Log文件的最后,并将读取的Master的Binary Log的文件名和位置传入master-info文件,以便下次快速读取。
       4.Slave的SQL线程检测出Relay Log文件新增加的内容后,会解析成对应SQL语句进行执行
   2.Mysql复制类型
       1.基于SQL语句的复制:在主服务器上执行的SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。一旦发现没法精确复制时,会自动选着基于行的复制。
       2.基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍。
       3.混合类型的复制: 默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。
   3.Mysql复制优势
       1.高性能读写分离,提高操作性能和效率。
       2.数据安全:随时暂停从服务器复制,实现数据备份和还原。
       3.远程数据分享.
   4.Mysql复制3个步骤:

       1.master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
       2.slave将master的binary log events拷贝到它的中继日志(relay log);
       3.slave重做中继日志中的事件,将改变反映它自己的数据。

    

    (注意:Mysql主从服务器的ID编号必须是不同的

二 Mysql主从复制配置(测试mysql安装:yum install mariadb mariadb-server -y

   配置前进行校时操作

  1. #安装ntpdate工具
  2. yum install ntpdate-y
  3. #使用ntpdate校时(后面的是ntp服务器)
  4. ntpdate pool.ntp.org

   1.主服务器配置(192.168.1.166)

       1.主服务开启二进制日志并设置服务器编号(需重启)

  1. vim /etc/my.cnf
  2. #在[mysqld]追加
  3. log-bin=Jacob-bin
  4. server-id=166
       2.创建复制帐号
  1. mysql -u root -p
  2. #创建用户slave_up允许从192.168.1网段登录
  3. CREATE USER 'slave_cp'@'192.168.1.%' IDENTIFIED BY 'pass';
  4. grant replication slave on *.* to 'slave_cp'@'192.168.1.%';
  5. exit
       3.获取主服务器二进制日志信息   
  1. mysql -u root -p
  2. #对数据库进行只读锁定(防止查看二进制日志同时有人对数据库修改操作)
  3. flush tables with read lock;
  4. #查询主机二进制文件信息
  5. show master status;
  6. +------------------+----------+--------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+--------------+------------------+| Jacob-bin.000003 | 2933 | | |+------------------+----------+--------------+------------------
  7. #解除只读锁定
  8. unlock tables;
  9. exit
        4.对现有数据库进行备份。(生产服务器可能本身已存在大量数据)
  1. #备份主数据库,并上传给从数据库
  2. mysqldump -uroot -p123456 --all-databases --lock-all-tables >/tmp/dbdump.sql
  3. scp /tmp/dbdump.sql 192.168.1.168:/tmp/
       5.防火墙策略允许
  1. firewall-cmd --add-port=3306/tcp --permanent
  2. firewall-cmd --reload
   2.从数据库配置(192.168.1.168)
       1.从服务进行编号(需重启)
  1. vim /etc/my.cnf
  2. #在[mysqld]追加
  3. server-id=168
       2.从服务器导入主服务器数据库
  1. mysql -uroot -p </tmp/dbdump.sql
       3.配置从服务器连接主服务器进行数据复制
  1. mysql -uroot -p
  2. #告知从服务器建立网络连接的必要信息
  3. change master to
  4. master_host='192.168.1.166' ,
  5. master_user='slave_cp', 
  6. master_password='pass',
  7. master_log_file='Jacob-bin.000003', 
  8. master_log_pos=2933;
  9. #启动slave
  10. start slave;
  11. #查看是否正常工作
  12. show slave status\G
  13. exit
       4.防火墙策略允许
  1. firewall-cmd --add-port=3306/tcp --permanent
  2. firewall-cmd --reload
   3.数据同步验证
       1.主服务操作
  1. mysql -uroot -p
  2. #建立测试数据库及添加一些信息
  3. create database test1;
  4. use test1;
  5. create table t_table(
  6. name char(20),
  7. age int,
  8. note varchar(50));
  9. insert into t_table values
  10. ('zhangsan',20,'Beijing'),
  11. ('lisi',20,'Xian');
  12. exit
       2.从服务器验证
  1. mysql -uroot -p
  2. select * from test1.t_table;
  3. +----------+------+---------+| name | age | note |+----------+------+---------+| zhangsan | 20 | Beijing || lisi | 20 | Xian |+----------+------+---------+
  4. exit
0 0
原创粉丝点击