主从复制

## 简介
master记录所有的更新操作到二进制日志文件,slave根据二进制日志文件进行同步;如果没有特别指定,二进制日志中所有的操作slave都会执行,当然,你可以指定slave只执行特定的数据库和表的更新操作;但是,你没办法指定master只记录特定的数据库和表的更新操作;
所有的节点都必须指定唯一的server-id,此外,slaves还必须要指定master的主机名,二进制文件名,和日志文件位置;这些同步操作都是slave自己主导的,同步进程有可能随时都会连接,断开,重新连接等;


## 配置说明
有多种方法进行配置副本集,具体的配置方法还要取决于你配什么样的副本集(主从、主主、层级主从),以及主库是否已经有数据;
这些任务是你必须要完成的;
* 在master上,你必须启用binary log,并配置server-id,重启
* 每个slave 必须配置server-id,重启
* 看你心情,在master上创建一个单独的用户用来读取binary log使用
* 在创建数据快照或者开启副本集进程前,你需要在master上记录当前binary log的位置,这在你配置slave时要让他知道从哪里开始执行;
* 如果你的master上已经有数据了,并且你希望同步到slave上去,你需要创建数据快照,复制到slave上去。
* 配置slave可以连接到master上;

## 备份 恢复

## 开始配置
1. 配置master
For the greatest possible durability and consistency in a replication setup using InnoDB with transactions, you should use innodb_flush_log_at_trx_commit=1 and sync_binlog=1 in the master my.cnf file.
``` 
   #server-id   1~232-1
    log-bin=mysql-bin
    server-id=1 
```
2. 配置slave
    server-id=2

3. 创建用户,可选

4. 获取master的binary log 位置
在一个命令行中执行`mysql> FLUSH TABLES WITH READ LOCK;`
在另一个命令行中查看`mysql > SHOW MASTER STATUS;`

5. 配置slave
```
    在mysql下执行:
    CHANGE MASTER TO
    MASTER_HOST='slave2.vfhdfs.com',
    MASTER_USER='repl',
    MASTER_PASSWORD='slavepass',
    MASTER_LOG_FILE='bin.000001',
    MASTER_LOG_POS=1480;
```
6. 开启关闭slave
```
    mysql> start slave;
    mysql> stop slave;
```
8. 查看slave状态
    ```
    show slave status\G
    ```

## 问题列表
* 在slave上无法启用查询日志,即在/etc/my.cnf中配置log时启动错误
    [ERROR] /usr/sbin/mysqld: ambiguous option '--log=/var/log/mysql/slave.log' (log-bin, log_slave_updates)
    查了google,解决方案是目前log参数弃用,改用
    general_log=ON
  general_log_file=/tmp/mysql.log





posted @ 2015-12-24 17:29  skyding  阅读(307)  评论(0编辑  收藏  举报