# 1\. 主庫創建允許遠程連接 + 至少具備 replication、slave 權限的 MySQL 用戶
### 用戶名解釋
這邊的用戶?`'slave_mysql'@'192.168.%'`?指的是只允許?`ip`?以?`192.168.`?開頭的遠程主機進行連接(本地測試用的),新手建議是設置為?`'slave_mysql'@'%'`。注意數據庫通配符的使用。
~~~
mysql -u root -p
mysql> grant replication slave on *.* to 'slave_mysql'@'192.168%' identified by '123456';
~~~
# 2\. 主庫配置文件設置
### 區分
`[mysql]`?是針對數據庫客戶端的配置
`[mysqld]`?是針對數據庫服務器的配置
### 這邊設置的是針對數據庫服務器的配置:
~~~
[mysqld]
# 設置服務器ID,從服務器ID必須大于主服務器ID
server-id=1
# 啟動 mysql 的二進制日志系統
log-bin=mysql-bin
# 需要同步的數據庫名,如果有多個,則重復此參數,每個數據庫一行
binlog-do-db=Test
# 不同步的 mysql 數據庫,同上
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=information_schema
binlog-ignore-db=sys
~~~
# 3\. 從庫配置文件
~~~
[mysqld]
server-id=2
log-bin=mysql-bin
# 要復制的數據庫
replicate-do-db=Test
# 不要復制的數據庫
replicate-ignore-db=mysql
replicate-ignore-db=performance_schema
replicate-ignore-db=information_schema
replicate-ignore-db=sys
~~~
# 4\. 查看主庫 master 信息
~~~
show?master?status;
~~~
#### 結果:
~~~
+------------------+----------+--------------+-------------------------------------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+-------------------------------------------------+-------------------+
| mysql-bin.000006 | 2216 | Test | mysql,performance_schema,information_schema,sys | |
+------------------+----------+--------------+-------------------------------------------------+-------------------+
1 row in set (0.00 sec)
~~~
#### 這邊特別注意的是?`file`、`position`、`binlog_do_db`?三個字段,分別是二進制日志文件(實現主從復制的文件),從庫開始復制的位置,需要進行同步的數據庫。
# 5\. 從庫,開啟同步
~~~
mysql> change master to
mysql> master_host='192.168.1.1' , # 遠程主機的IP地址
mysql> master_user='slave_mysql'@'192.168.%' , # 主庫允許遠程連接的用戶
mysql> master_password='123456' , # 密碼
mysql> master_log_file='mysql-bin.000006' , # 同步的日志文件
mysql> master_log_pos=2216; # 開始同步的位置
~~~
# 6\. 從庫檢查是否成功開啟
~~~
show?slave?status?\G
~~~
#### 結果
~~~
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.150.128
Master_User: slave_mysql
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000006
Read_Master_Log_Pos: 2216
Relay_Log_File: grayVTouch-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000006
Slave_IO_Running: Yes // 必須為 yes
Slave_SQL_Running: Yes // 必須為 yes
Replicate_Do_DB: Test
Replicate_Ignore_DB:
......
1 row in set (0.00 sec)
~~~
#### `Slave_IO_Running`?和?`Slave_SQL_Runniing`?必須為?`yes`?,表示開啟成功。
# 7\. 查看效果
#### 主庫中針對同步的數據庫新增(或修改)數據,然后查看從庫對應的數據庫。
#### 主庫
~~~
use Test;
create table if not exists test_master_slave (
id int primary key auto_increment not null ,
action char(255) ,
c_time timestamp default current_timestamp
);
~~~
#### 從庫
查看?`Test`?數據庫有沒有出現?`test_master_slave`?表。
# 8\. 相關問題
### 1.?`Slave_IO_Running:connecting`?問題
從庫沒有訪問主庫的權限,實際就是主庫沒有開啟遠程訪問的賬號。解決方法,主庫新建具有遠程連接的賬號,從庫關閉現有的主從復制進程,重新設置 master,然后在開啟主從復制。
1. 執行 步驟1
2. `mysql> stop slave;`
3. 重復 步驟5(包含步驟5)以下步驟
### 2.?`Slave_IO_Running:no`?問題
`SQL`?語句出現錯誤,導致同步進程終止。具體可以查看從庫錯誤日志,路徑:`/path/to/mysql/data/userAccount.err`?文件。`userAccount`?指的是主庫所在遠程主機的用戶名(猜的)。
- 第一部分 每日內容
- 第一天 需求分析
- 第二天 ER圖
- 第三天 git
- 第四天 laravel基礎串講
- 第五天 ORM
- 第六天 項目的后臺模板、登錄模塊、表單驗證
- 第七天 用戶模塊
- 7.1登錄中間件
- 7.2用戶的添加
- 7.3用戶的查詢
- 7.4用戶的修改
- 7.4用戶的刪除
- 第八天 分類模塊
- 8.1分類表和分類模型
- 8.2分類排序
- 第九天 文件模塊
- 9.1百度編輯器
- 9.2文件上傳
- 9.3阿里OSS
- 9.4七牛云
- 第十天 網站配置模塊
- 10.1網站配置表結構
- 10.2添加網站配置
- 10.3將數據表中的配置信息寫入config配置文件中
- 10.4瀏覽配置信息
- 第十一天 網站前臺
- 11.1共享變量
- 11.2前臺首頁
- 第十二天 RBAC
- 第十三天 手機驗證碼
- 13.1手機驗證碼
- 13.2發送驗證郵件
- 13.3密碼找回
- 第十四天 實用組件
- 第十五天 服務器方面
- LNMP
- MySQL主從
- laravel主從
- 負載均衡
- 第二部分 所需模塊
- 1登錄模塊
- 2注冊模塊
- 3無限極分類模塊
- 4圖片管理模塊
- 5日志模塊
- 6標簽模塊
- 7購物車模塊
- 8驗證碼模塊
- 9支付模塊
- 10秒殺模塊
- 11驗證碼模塊
- 12消息隊列模塊
- 13ckplayer播放器
- 14美洽客服插件
- 15markdown和百度編輯器