• MySQL 复制 on Ubuntu12.04


    一、简介

    MySQL 复制(Replication)基于binnary logging机制,将数据在master和slave之间同步。无论机制、配置、运行维护都比MSSQL2000的复制简单稳定很多(mssql2000之后的版本没用过)。

    Mysql master将数据更新、变化作为事件写入binary log,Mysql slave读取binary log的事件并将相同的更新、变化写入自己的数据库。

    Master只管自己写binary log,不用照看slave。Slave只要在线,数据即可持续同步;即使slave离线,恢复在线后可以继续执行未完成的复制。这一点非常适合进行数据备份,因为在slave上备份丝毫不影响master的运行。

    Master可以有多个slaves,slave也可以同时作为master并且拥有自己的slaves。

    每一个master和slave必须在my.cnf中指定唯一的 server-id。

    在slave上,复制可以随时使用简单的指令停止、恢复。

    binary log有三种格式:STATEMENT,ROW,MIXED。STATEMENT格式基于SQL语句,性能高但不支持某些SQL语句;ROW格式基于行,能克服STATEMENT格式的缺点但会产生较大的日志;MIXED结合二者特点,默认使用STATEMENT,当STATEMENT格式不适用时自动转为ROW格式。推荐MIXED可以在Master的my.cnf中设定此参数。

    二、设置Mysql复制非常简单,场景如下。

    OS:Ubuntu12.04 X86_64

    Master:主机名 mysql-0,IP 192.168.150.200

    Slave: 主机名 mysql-1,IP 192.168.150.204

    1、在Master上:

    编辑文件/etc/mysql/my.cnf 确保有如下几行(后3行是InnoDB引擎必须的,建议加上)
    [mysqld]

    bind-address=0.0.0.0
    server-id=1
    log-bin=mysql-binary-log   #这个名字自己随便起
    binlog_format=MIXED
    innodb_fast_shutdown=0
    innodb_flush_log_at_trx_commit=1
    sync_binlog=1

    然后重启Master的mysql server。

    创建一个用户

    mysql> create user 'repl'@'192.168.150.200' identified by 'pass4repl';
    mysql> grant replication slave on *.* to 'repl'@'192.168.150.200';

    为slave获得binary log坐标,首先要使数据库暂时只读,执行:
    mysql> FLUSH TABLES WITH READ LOCK;

    此终端窗口不动,另外打开一个终端窗口连接到mysql server,执行:
    mysql> SHOW MASTER STATUS;
    +-------------------------+----------+--------------+------------------+
    | File                    | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +-------------------------+----------+--------------+------------------+
    | mysql-binary-log.000001 |      106 |              |                  |
    +-------------------------+----------+--------------+------------------+
    1 row in set (0.00 sec)

    记下来这两个值mysql-binary-log.000001、106,一会儿设置slave时要用到,注意,这是我的测试结果,你的结果很可能不同。(Binlog_Do_DB 和 Binlog_Ignore_DB也许能决定哪些库复制哪些库不复制,这个以后研究

    如果Master上已经有了数据,则需要先用mysqldump或者原始数据拷贝生成现有数据的”快照“,应用到Slave服务器上,再配置Slave。

    一般用mysqldump做备份,再拷贝到slave上恢复就能满足大部分需求。特殊情况稍微复杂些,可以参考官方链接:
    16.1.1.5 Creating a Data Snapshot Using mysqldump
    16.1.1.6 Creating a Data Snapshot Using Raw Data Files

    如果Master上没有用户数据,或者已经把数据快照应用到Slave上,就可以在刚才执行”FLUSH TABLES WITH READ LOCK;“的终端窗口里执行
    mysql> UNLOCK TABLES;

    以解锁Master数据库,然后继续配置Slave。(或者退出该终端窗口也可)

    2、在Slave上:

    编辑文件/etc/mysql/my.cnf 确保有如下2行
    [mysqld]

    report-host=192.168.150.200
    server-id=2

    重启一下slave的mysql server。

    然后在mysql中执行:
    mysql> CHANGE MASTER TO
        -> MASTER_HOST='192.168.150.200',
        -> MASTER_USER='repl',
        -> MASTER_PASSWORD='pass4repl',
        -> MASTER_LOG_FILE='mysql-binary-log.000001',
        -> MASTER_LOG_POS=106;

    大功告成!

    3、简单的管理任务(结果数据来自官方文档)

    在Master上

    mysql> SHOW PROCESSLIST \G;
    *************************** 4. row ***************************
         Id: 10
       User: root
       Host: slave1:58371
         db: NULL
    Command: Binlog Dump
       Time: 777
      State: Has sent all binlog to slave; waiting for binlog to be updated
       Info: NULL

    mysql> SHOW SLAVE HOSTS;
    +-----------+--------+------+-------------------+-----------+
    | Server_id | Host   | Port | Rpl_recovery_rank | Master_id |
    +-----------+--------+------+-------------------+-----------+
    |        10 | slave1 | 3306 |                 0 |         1 |
    +-----------+--------+------+-------------------+-----------+
    1 row in set (0.00 sec)

    在slave上

    mysql> SHOW SLAVE STATUS \G
    mysql> STOP SLAVE;
    mysql> START SLAVE;

    参考:http://dev.mysql.com/doc/refman/5.5/en/replication.html Mysql的官方文档写得真心不错,清晰易懂。

  • 相关阅读:
    Hibernate sqlserver 的对象转成 Hibernate mysql 的对象时 需注意
    将绿色版Tomcat服务添加到系统服务并设为开机运行
    进程上下文和中断上下文
    关于上、下拉电阻的总结整理
    I2C设备驱动流程
    MTK6573的LDO控制
    iomem—I/O映射方式的I/O端口和内存映射方式的I/O端口
    Linux I2C子系统分析I2C总线驱动
    Camera读取ID方法总结
    Linux 信号signal处理机制
  • 原文地址:https://www.cnblogs.com/panblack/p/mysql_replication_basic.html
Copyright © 2020-2023  润新知