数据库安装配置等略过,保证版本一致,配置一致
基于行的复制和基于语句的复制
## 一、创建复制帐号,主从都配置这个帐号
~~~
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'%' IDENTIFIED BY 'Password!123';
~~~
## 二、打开主数据库的二进制日志并制定一个独一无二的服务器ID(修改my.cnf文件)
~~~
vim /etc/my.cnf
## 输入一下内容
log_bin = mysql-bin
server_id = 1 #一般是取IP地址末8位,但是要确保它是唯一并且不变的
~~~
重启MySQL,查看是否已经创建
`show master status`
![](https://box.kancloud.cn/fc032c1862cbe44048f3bf99775b5fc5_539x132.png)
## 三、备库上面也要增加类似配置
以下配置不都是必须的,实际上,只有server_id是必须的
~~~
vim /etc/my.cnf
log_bin = mysql-bin # 为了简便,直接设置和主表一样,默认是根据机器名来命名
server_id = 2
relay_log = /var/lib/mysql/mysql-relay-bin # 指定中继日志的位置和命名
log_slave_updates = 1 # 允许备库将其重放的事件也记录到自身的二进制日志中,数据库自身会增加额外的工作量
read_only = 1 # 配置选项,不清楚,看书本439页
~~~
## 四、启动复制,不需要修改my.cnf文件,直接用语句,运行下面语句并不会立马开始运行复制
```
CHANGE MASTER TO MASTER_HOST = '192.168.1.6',
MASTER_USER = 'repl',
MASTER_PASSWORD = 'Password!123',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=0;
```
![](https://box.kancloud.cn/96f0da3cc6d895200f5c1079c0473574_398x114.png)
## 运行 `show slave status;`来检查复制是否正确执行
![](https://box.kancloud.cn/255bdb656925801eb0dd9e705b8243b5_1560x66.png)
运行下面语句之后就会开始启动复制,建议你看完之后再执行这条语句
运行MySQL命令`START SLAVE;`开始复制
1. 以上的建立的基础是:默认主库和从库都是刚刚安装好的,并且都是默认数据,不过一般情况下不是这样
2. 一般情况下都是一台服务器运行了一段时间,然后再启动复制同步,这个时候从库上面是没有数据的。
3. 主从复制是从配置了二进制文件的时候开始记录的,没开启之前的数据都是不会同步的(重启服务会重新生成一个新的二进制文件)。
4. 这个时候就需要将主库的数据线备份到从库来初始化从库。备份有很多方式,冷备份,热备份,mysqldump等都可以
5. 有错误就停止了,所以要保证数据一致性
简单说下数据备份,保证一致问题
* 最简单的,直接关闭主库,然后将数据备份到备库,可以采用高效复制文件的方法将数据传送到从库
* 采用热备份,如果仅使用了MyISAM表,可以在主库运行时采用mysqlhotcopy或者rsyncLaura复制数据,这里不详细展开说明
* 如果只包含了InnoDB表,可以使用mysqldump命令来转储主库数据并将其加载到备库,然后设置相应的二进制日志坐标 `mysqldump --single-transaction --all-databases --master-data=1--host=server1 \ | mysql --host=server2`
* 使用快照或者备份
* 使用percona Xtrabackup
* 使用另外的备库
可以运行 `SHOW PROCESSLIST;`查看线程,如下查看主库的
![](https://box.kancloud.cn/f9b95724a6b94d836156a5731d1b6ff5_917x96.png)
查看从库的
![](https://box.kancloud.cn/9cb2646f552386e5d7c1c6e34a270002_837x74.png)
# 问题
如果数据没同步,查看错误日志
![](https://i.vgy.me/U3qzgx.png)
正确无错误应该是如下图所示
![](https://i.vgy.me/eGQ84r.png)