zoukankan      html  css  js  c++  java
  • mysql主从复制

    mysql主从

    MySQL Replication 概述
    MySQL Replication 俗称MySQL AB复制(主从,双机热备),从库以一定的频率去读取主库的二进制日志文件,按照日志中记录对从库进行同样的操作,以达到同步效果。

    MySQL 支持的复制类型
    基于语句的复制 在主服务器上执行的SQL语句,在从服务器上执行同样的语句,MySQL默认采用基于语句的复制,效率比较高
    基于行的复制 把改变的内容复制过去,而不是把命令在从服务器上执行一遍
    混合类型的复制 默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用行

    复制的工作过程
    1.在每个事务更新完数据完成之前,Master在二进制日志(Binary log,binlog)记录这些改变,写入二进制日志完成后,Master通知存储引擎提交事务
    2.Slave将Master的Binary log复制到其中中继日志,首先Slave开始一个工作线程-I/O线程在Master上打开一个普通的连接,然后开始Binlog dump process,Binlog dump process从Master的二进制日志中读取事件,如果已经跟上Master,它会催眠并等待Master产生新的事件,I/O线程将这些事件写入中继日志。
    3.SQL Slave Thread(SQL从线程)处理该过程的最后一步,SQL线程从中继日志读取事件,并重放其中的事件而更新Slave的数据,使其与Master中的数据一致,只要该线程与I/O线程保持一致,中继日志通常会在OS的缓存中,所以中继日志的开销很小。

    1:192.168.16.238 主master

     192.168.16.239 从slave

    [root@shell ~]# cat /etc/issue
    Red Hat Enterprise Linux Server release 6.3 (Santiago)
    Kernel on an m

    1)通过yum安装mysql

    yum -y install mysql 安装客户端

    yum -y install mysql-server 安装服务端

    yum install mysql-devel

    [root@oracle10g yum.repos.d]# rpm -qa |grep mysql
    mysql-server-5.1.61-4.el6.x86_64
    mysql-libs-5.1.61-4.el6.x86_64
    mysql-devel-5.1.61-4.el6.x86_64
    mysql-5.1.61-4.el6.x86_64

    我们可以看到版本是5.1

    service mysqld start

    尝试登陆mysql数据库: 

    mysql数据库结构展示:

       

    2)给mysql创建一个密码。

    [root@oracle10g yum.repos.d]# mysqladmin -u root password 123456

    3)service iptables stop

       setenforce 0               关闭防火墙

    4)建立时间同步,本次以master为主

      yum -y install ntp

      vi /etc/ntpd.conf

      server 127.127.1.0
      fudge 127.127.1.0 stratum 8  在最下面加入本段参数,说明:127.127.1.0 本地硬件时钟(由于时间服务器同步需要大概5分钟左右,如果在此期间执行ntpdate 61.129.42.44 会出现 8 Jun 20:57:14 ntpdate[22982]: no server suitable for synchronization found 的错误)

          

          在slave服务端加入定时同步任务:1 1 * * * /usr/sbin/ntpdate 192.168.16.238 && /sbin/clock -systohc

      

    5)配置master服务端

      vi /etc/my.cnf

      

      主机必须的配置项:
      log-bin //自定义,比如 log-bin=mysql-bin
      server_id //为server起一个唯一的id,默认是1,推荐使用IP的最后一节。
      从机必须的配置项:
      server_id //为server起一个唯一的id,默认是1,推荐使用IP的最后一节.

      注意:一般,我们也会为从机设定log-bin,这是因为默认的log-bin文件是根据主机名命名的,一旦机器更改主机名就会出问题,再者保持主从机的配制一致也方便做主从机切换!

      主机可选的配置项:(用于配置主机哪些库会做二进制日志用以Replicate)
      binlog-do-db
      binlog-ignore-db
      从机可选的配置项:(用于配置从机会Replicate哪些库和表)
      replicate-do-db, replicate-ignore-db
      replicate-do-table, replicate-ignore-table
      replicate-wild-do-table
      replicate-wild-ignore-table

          

        重启master服务端

      service mysqld restart 

        

      创建Replication用户,并赋权(使得用户可以使用SHOW MASTER STATUS和SHOW SLAVE STATUS命令,也就是说这个权限是用于授予账户监视Replication状况的权力,

      update user set hosts='192.168.16.%' where user='myslave_zdsoft';

      replication slave: 用于复制型从属服务器(从主服务器中读取二进制日志事件)

      查看master状态

      

      供Slave DB连接时使用,记录下File和Position的值

      

      从库连接主库进行测试,如果连接成功说明主库配置成功
      

    (update user set host='%' where host='localhost';

     FLUSH PRIVILEGES; )

    mysqldump -u root -h127-p123456 --all-databases > /root/alldbbackup.sql导出数据库

    [root@shell ~]# mysql -u root -h 192.168.16.238 -p
    Enter password: 
    Welcome to the MySQL monitor. Commands end with ; or g.
    Your MySQL connection id is 9
    Server version: 5.1.61-log Source distribution

    Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.

    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

    mysql>

    将库备份导入到从库当中      

    scp ~/*.sql 192.168.16.239:~

    导入备份

    mysql -u root -p < /root/*.sql

    在主库创建一个test1的库

    create database test1;

    在 Slave服务器授权,启动从库,进行主从库数据同步

    [root@shell ~]# mysql -u root -p123456
    Welcome to the MySQL monitor. Commands end with ; or g.
    Your MySQL connection id is 2
    Server version: 5.1.61 Source distribution

    Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.

    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

    mysql> CHANGE MASTER TO
    -> MASTER_HOST='192.168.16.238',
    -> MASTER_USER='myslave_zdsoft',
    -> MASTER_PASSWORD='654321',
    -> MASTER_LOG_FILE='mysql-binlog.000019',
    -> MASTER_LOG_POS=106;
    Query OK, 0 rows affected (0.30 sec)

    参数说明: 
    mysql> CHANGE MASTER TO
    -> MASTER_HOST='master_host_name', //主服务器的IP地址
    -> MASTER_USER='replication_user_name', //同步数据库的用户
    -> MASTER_PASSWORD='replication_password', //同步数据库的密码
    -> MASTER_LOG_FILE='recorded_log_file_name', //主服务器二进制日志的文件名(前面要求记录的参数)
    -> MASTER_LOG_POS=recorded_log_position; //日志文件的开始位置(前面要求记录的参数)

    根据在主库执行的show master status 填写

    start slave;

    show slave status/G

    如上图所示,库已经同步到从库.

    create table a(name varchar(12),year varchar(12)); 在test1库里,创建表

     参数说明:

     log-bin = mysql-bin #复制过程即 Slave 从 Master 端获取该日志再执行日志记录的操作

     server-id = 1 #1 代表 master 服务

     binlog-do-db = backup#要同步的库 backup

     binlog-ignore-db = mysql #不同步的库,初始所有库默认为不同步,但为了明确最好加上 

    server-id = 2 #2 代表 slave 服务
    replicate-ignore-table = backup.tb2 #不同步 backup 库的 tb2 表

    skip-slave-start #防止复制随着 mysql 启动而自动启动。即 slave 端的 mysql 服务重启后需手动
    来启动主从复制(slave start) ,最好加上,slave 端数据库服务重启后手动启动 slave 比较安全

    如果 slave 服务也同时作为另一个 mysql 服务的 master 服务,则配置文件[mysqld] 节点内容还需要加上 log-slave-updates

    1:测试log-bin 后面的参数是否可以随便填 ( 此参数跟slave配置的 relay-log-bin参数原理一致)

      1):log-bin=mysql-master

        show master status

        

    mysql> show master status;
    +---------------------+----------+--------------+------------------+
    | File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +---------------------+----------+--------------+------------------+
    | mysql-master.000001 | 106 | | |
    +---------------------+----------+--------------+------------------+
    1 row in set (0.00 sec)

    我们可以看到file文件的名字变成了,mysql-master , log-bin参数为bin-log文件的名的前缀

    2)测试 binlog-do-db参数,

       binlog-do-db=test2

       加到master中

      分别在master库中创建test2 test3

      create database test2;

      create database test3;

      

    mysql> show databases;
    +--------------------+
    | Database |
    +--------------------+
    | information_schema |
    | mysql |
    | test |
    | test1 |
    | test2 |
    +--------------------+
    5 rows in set (0.00 sec)

    可以看到test2同步了,test3没有同步

    3)replicate-ignore-table = test2.b 并加入skip-slave-start参数,使之不随mysql启动而启动

      在slave服务器加入上述参数;

      

      可以看到skip-slave-start参数已经生效。

      

      

      replicate-ignore-table = test2.b 参数也生效了

    总结:经过本次配置,主从复制简单来说就是slave通过配置的myslave_zdsoft(Replication)用户,读取master通过master配置的log-bin日志文件,通过分析,插入到从库中。

  • 相关阅读:
    Atitit  atiMail atiDns新特性 v2  q39
    Atitit  atiMail atiDns新特性 v2  q39
    Atitit.aticmd v4  新特性q39 添加定时器释放功能
    Atitit.aticmd v4  新特性q39 添加定时器释放功能
    Atitit. Atiposter 发帖机 新特性 poster new feature   v7 q39
    Atitit. Atiposter 发帖机 新特性 poster new feature   v7 q39
    Atitit.编程语言and 自然语言的比较and 编程语言未来的发展
    Atitit.编程语言and 自然语言的比较and 编程语言未来的发展
    atitit.解决struts2 SpringObjectFactory.getClassInstance NullPointerException  v2 q31
    知也atitit.解决struts2 SpringObjectFactory.getClassInstance NullPointerException  v2 q31无涯 - I
  • 原文地址:https://www.cnblogs.com/handsome1013/p/7494798.html
Copyright © 2011-2022 走看看