master配置
1、修改配置文件
vim /etc/my.cnf
2、設置master信息
# 主機唯一id
server-id=1
# 啓動二進制文件
log-bin=mysql-bin
# 設置不需要複製的數據庫(可以設置多個)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
# 設置需要複製的數據庫
# 需要注意:這配置的數據庫,一定是還沒有創建的數據庫,否則slave無法複製
binlog-ignore-db=[DataBaseName]
# 設置logbin日誌格式
binlog_format=STATEMENT
#參數註解:
# 1、STATEMENT: 記錄每一條進行數據修改的語句
# 2、ROW:記錄的是每一行的數據變更
# 3、MIXED:結合了以上兩種日誌的格式(默認格式)
3、退出,重啓mysql
# 推出 vim 編輯器
esc
:wq
# 重啓 MySQL
systemctl restart mysqld
4、進入mysql客戶端
# 對應的參數 ip 、 用戶名 、 密碼 、端口號
mysql -h192.168.222.222 -uroot -proot -P3306
# 給從機配置一個賬號
# 參數 第一個 test01 分別爲用戶名
# 參數 第二個 test01 分別爲密碼
# 中間 192.168.222.222 是 slave(從機)的ip地址
mysql>
grant replication slave on *.* to 'test01'@'192.168.222.222' identified by '123';
# 查看主機的狀態
mysql> show master status;
- File:爲日誌文件
- Position:爲從哪裏開始複製
- Binlog_Do_DB:需要複製的數據庫
- Binlog_Ingnore_DB:不需要複製的數據庫
此時就不要對主機進行操作了,爲什麼這樣,看到最後你就明白了!
slave配置
1、修改配置文件
vim /etc/my.cnf
2、設置slave配置
# 配置從機id
server-id=2
# 啓用中繼日誌
relay-log=mysql-relay
3、退出vim,重啓msyql
# 退出 vim 編輯器
esc
:wq
# 重啓 MySQL
systemctl restart mysqld
4、進入mysql,配置master
# 如果你之前進行過配置
# 先結束salve的啓動
mysql> stop slave;
# 再重新配置master
mysql> reset master;
# 端口默認 : 3306
mysql>
change master to master_host='192.168.111.111',
master_port=3306,
master_user='test01',
master_password='123',
master_log_file='mysqlbin.000006',
master_log_pos=310;
# 啓動slave
start slave;
# 查看 slave 的狀態
# \G : 按行顯示
show slave status\G;
出現紅框中的兩個都是yes的時候,你就算是成功了!
遇到的問題
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
在給slave分配用戶的時候,設置的密碼太簡單了,就會出現這個問題。
解決方案:
1、查看密碼管理策略
mysql> SHOW VARIABLES LIKE ‘validate_password%’;
2、設置密碼驗證強度爲低
mysql> set global validate_password_policy=LOW;
參數解釋:
LOW:只驗證長度;
MEDIUM:驗證長度、數字、大小寫、特殊字符;
STRONG:驗證長度、數字、大小寫、特殊字符、字典文件;
3、設置密碼長度(你設置的長度最小爲4)
mysql> set global validate_password_length=6;
Slave_IO_Running: Connecting
這個問題發生在給slave配置完master之後,如下圖:
說明你的slave 沒有連接上你的 master;
可能的原因:
1、master 服務器端口沒開
2、slave 服務器配置 master 的時候端口沒有配置好
3、網絡問題
我的就是因爲我的master服務器中的 mysql 我修改了端口號,但是在slave中沒有配置。
如果是默認3306,紅框中的配置信息是不用填寫的,但是由於我改了端口,所以我就添加了端口了,我把3306改成了我 master 的端口號了。
如果是端口沒開:
# 開端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
# 重啓防火牆
firewall-cmd --reload
三言兩語
mysql 的主從複製是追加的方式,和redis的rdb全盤複製方式有所有不同。這也是爲什麼在配置好master的信息之後,插敘master的status之後,最好先不要動的理由,如果此時動了需要需要複製的數據庫,對應的行數就會發生數就會發生變化,導致主從數據庫內容不一致。
它的工作模式是:
- slave 從 master 數據庫中複製 logbin日誌
- 然後對需要複製數據庫的增刪改操作進行復制操作 (簡單來說,master做了啥改變,我slave也照着你的動作重新做一遍)
注:
binlog日誌:記錄所有的DDL(數據定義語言)和DML(數據操縱語言),不包括查詢語句。
簡單總結,如有紕漏,歡迎大家指出交流!感覺不錯,留個言~ 點個贊,我不挑食!~