## 简介
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 statusG
```
## 问题列表
* 在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