zoukankan      html  css  js  c++  java
  • 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日志文件,通过分析,插入到从库中。

  • 相关阅读:
    八大 IoT 安全关键技术解析
    IoT: 物联网安全测试经验总结
    业务逻辑漏洞挖掘
    从零开始Android逆向教程(二)——什么是Xposed
    Mac terminal commands
    Obj-C 实现 QFileDialog函数
    打开文件所在目录并选择该文件
    Qt样式表使用注意项
    window响应拖拽文件操作
    Window检测网络连接情况
  • 原文地址:https://www.cnblogs.com/liangsky/p/4562317.html
Copyright © 2011-2022 走看看