天天看點

Mysql主從資料庫配置Mysql主從實驗操作步驟2.配置中遇到的坑(水準不夠導緻的錯誤)

這兩天進行項目中經常出現大量的對資料庫的讀寫操作,資料庫壓力頗大,便想着配置一下mysql的主從資料庫,下面與大家分享整個配置步驟已及裡面遇到的坑。

Mysql主從實驗

首先介紹主從的概念

主 – 主機,負責對資料庫的讀寫操作,資料類型主要是innordb 

從 – 從機,負責對資料庫的讀操作,資料庫類型主要是myisam 

主從複制即是從機拷貝主機的資料,而使用者對資料庫的讀操作隻通過從機即可,因為myisam的的強大之處在于讀操作,一個主機可以配置多個從機。

操作步驟

1.MYSQL主從配置

1.1 部署環境

主(master_mysql): 192.168.1.200     OS:CentOS 7.2
從(slave_mysql):   192.168.1.201      OS:CentOS 7.2
           

1.2 安裝mysql

基本操作。。應該都會

好吧,還是貼一下

yum install mysql-server
           

要有兩個伺服器啊啊啊啊,兩個都要安裝啊啊啊啊……

1.3配置

1.3.1主配置

vim /etc/my.cnf
 ```
 ```
server-id=200  #設定主伺服器的ID
innodb_flush_log_at_trx_commit=2  #作業系統崩潰或者系統斷電的情況下,上一秒鐘所有事務資料才可能丢失
sync_binlog=1  #開啟binlog日志同步功能
log-bin=mysql-bin-200  #binlog日志檔案名
binlog-do-db=xxxx  # 這個表示隻同步某個庫 (如果沒有此項,表示同步所有的庫)
           

1.3.2 配置完後,重新開機主庫的mysql

service mysqld restart
mysql -uroot -p  ##登入mysql
mysql>grant replication slave on **.** to 'mark'@'192.168.1.201' identified by '123456';   ##授權給從資料庫伺服器192.168.1.201,使用者名mark,密碼123456
mysql>show master status ; ##檢視主庫的狀态  
+------------------+----------+--------------+
| File             | Position | Binlog_Do_DB |
+------------------+----------+--------------+
| mysql-bin.000009 |     1805 | fwwb         |
+------------------+----------+--------------+
           

1.3.3 配置從庫伺服器

vim /etc/my.cnf

server-id=201
innodb_flush_log_at_trx_commit=2
sync_binlog=1
log-bin=mysql-bin-201
           

1.3.4 配置完後,重新開機從庫的mysql

service mysqld restart
mysql -uroot -p
mysql> change master to  master_host='192.168.1.200', master_user='mark' ,master_password='123456', master_log_file='mysql-bin-200.000002' ,master_log_pos=1167;
mysql> start slave;  ##開啟從庫   (stop slave:關閉從庫)
mysql> show slave status; ###Slave_IO_Running,Slave_SQL_Running 都為Yes的時候表示配置成功
           

1.4:驗證主從 

可以在主庫上的表裡修改一個資料,看看從庫裡對應的地方有沒有更新

對于大佬來說,這篇文章到這就沒有意義了……

對我這種小白來說,這才是剛開始啊啊啊!!

2.配置中遇到的坑(水準不夠導緻的錯誤)

在配置完後,使用

show slave status;
           

指令檢視從資料庫狀态,果不其然的……報錯了;

Slave_IO_Running: No;
           

2.1 server_ids

仔細看了下錯誤資訊,顯示

master and slave have equal MySQL server ids;
           

字面上看,是serverids相同,改成不同的就好了。但是我在my.cnf裡設定的完全就是兩個id啊……

然後,百度了一下才發現,原來serverids跟配置檔案裡的server-id不一樣,好吧原來是my.cnf的配置沒起作用,然後我才想起來,主從資料庫的配置是要寫到

【mysqld】
           

标簽下的,好吧,改了配置檔案依舊報錯。于是使用指令檢視server_ids;

mysql> show variables like 'server_id'; 
+---------------+-------+ 
| Variable_name | Value | 
+---------------+-------+ 
| server_id | 1 | 
+---------------+-------+ 
1 row in set (0.00 sec) 
           

發現兩個伺服器server_id都是1,于是使用指令

mysql> set global server_id=2; 
           

将其中一個改成2,就好了。

2.2 日志檔案

此時繼續報錯

Could not find first log file name in binary log index file
           

Master上檢視binlog的資訊:

mysql> show variables like 'log_bin%';
+---------------------------------+---------------------------------+
| Variable_name             | Value                  |
+---------------------------------+---------------------------------+
| log_bin                 | ON                    |
| log_bin_basename           | /data/logs/mysql-bin        |
| log_bin_index             | /data/logs/mysql-bin.index    |
| log_bin_trust_function_creators | ON                    |
| log_bin_use_v1_row_events     | OFF                   |
+---------------------------------+---------------------------------+


mysql>system more /data/logs/mysql-bin.index 
/data/logs/mysql-bin.000008
           

對比發現從資料庫讀的是mysql-bin.000001,于是使用指令

CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000008',MASTER_LOG_POS=0;
           

此處注意master_log_pos可設定為0,這樣mysql會自動比對

然後重新啟動主從資料庫

再次檢視從庫狀态

Slave_IO_State: Waiting for master to send event
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
           

此時slave_io_running和slave_sql_running 都是yes,在主資料庫更新一條資料,從庫同步更新完成,至此完成整個主從資料庫配置過程。

需要注意的是有些操作需要先關閉主從同步,文中并未明确指出,讀者操作時需依據自身情況調整指令的使用。