數據庫安裝配置等略過,保證版本一致,配置一致
基于行的復制和基于語句的復制
## 一、創建復制帳號,主從都配置這個帳號
~~~
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`
?
## 三、備庫上面也要增加類似配置
以下配置不都是必須的,實際上,只有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;
```

## 運行 `show slave status;`來檢查復制是否正確執行

運行下面語句之后就會開始啟動復制,建議你看完之后再執行這條語句
運行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;`查看線程,如下查看主庫的

查看從庫的

# 問題
如果數據沒同步,查看錯誤日志

正確無錯誤應該是如下圖所示
