MySQL主從配置的簡單流程

基本流程
主庫ip:192.168.1.100 從庫IP:192.168.1.200
首先記得關閉防火牆。
修改/etc/selinux/config 文件的配置

selinux=disabled 

關閉防火牆服務

service iptables stop 

安裝mysql數據庫:
首先先查看是否已經安裝mysql:

rpm  -qa|grep -i mysql

如果命令執行之後有結果,就是已經安裝過了。
卸載:

rpm -e 包名

有時候可能卸載不成功,因爲與其他安裝包存在依賴關係
強制卸載 :

rpm --nodeps -e 包名 

一般來說卸載了mysql,但是my.cnf等文件並不會自動刪除的。
以防萬一可以查找到所有mysql相關的安裝目錄刪除

find / -name mysql*
rm -rf  /var/lib/mysql
rm -rf /etc/my.cnf

安裝好mysql之後
修改數據庫配置文件:
通過命令查看主機上數據庫安裝情況

ps -ef|grep mysql

可以知道mysql數據安裝之後,datadir,basedir,以及pid文件,sock文件,err文件和日誌文件等存放路徑。
從/urs/ 下複製my.cnf文件到 /etc/my.cnf。
對主庫、從庫:將 ps -ef 看到的 這些參數記錄入my.cnf文件。
對主庫:添加:

server-id=1 (值比從庫的server-id小就行了,除了0。)
log-bin=mysql-bin
replicate-do-db=test
replicate-do-db=iris

(要同步多少個庫,就寫多少行。也可以寫在同一行,庫名用逗號隔開。)
對從庫:添加:

server-id=2(值比從庫的server-id小就行了,除了0。)
log-bin=mysql-bin
relay-log-bin=mysql-relay-log

簡單的主從,上面的配置就夠了。
主庫、從庫配置文件均修改完畢之後,進入數據庫:
在主庫:
創建用戶back,同時給它授權,允許從庫(200)通過此賬戶進行主從同步。

mysql>grant replication slave on *.* to 'back'@'192.168.1.200 identified by 'back';
mysql>flush privileges;

獲取master_log_file和master_log_pos的值。

mysql>show master status;

在從庫:
進入從庫的數據庫,未啓動slave的狀態,輸入如下命令:

mysql> change master to 
~>master_host='192.168.1.100',
~>master_user='back',
~>master_password='back',
~>master_port=3306,
~>master_log_file='mysql-bin.000005',
~>master_log_pos=120;

接着查看slave的狀態,是否與上述執行結果一樣,輸入如下命令;

mysql>show slave staus;

這個時候,因爲slave還未啓動,所以
slave_IO_running 和slave_SQL_running 都是no;
接着,啓動slave

mysql>start slave

這時候再查看slave的狀態,

mysql>show slave staus;

slave_IO_running 和slave_SQL_running 都變爲 yes 了;
說明,主從的連接和同步正常。


在配置過程中,可能遇到很多問題。
1.如:
主從雖然配置完畢,但是,主庫和從庫的同步進行並不正常

Slave_IO_Running: Connecting 
Slave_SQL_Running: Yes

這結果說明,從庫連接不上主庫的數據庫。
可以在從庫上連接主庫數據庫做測試,

[root@ldw~] mysql -h 192.168.1.100 -P 3306 -uback -p
Enter Password:
ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (113)

這種情況可能是網絡不通或者端口不可用。
看看從庫能否正常在本地訪問主庫的數據庫。如下:
在從庫上打開一個新的命令窗口:
通過telnet 方式測試網絡的連通性。
輸入:telnet 192.168.1.100 3306
發現

Trying192.168.1.100...
telnet: connect to address192.168.1.100.: No route to host

可能
1> 、網絡不通:
可以先通過ping命令查看網絡情況。
2>、訪問沒權限:
檢查100數據庫裏mysql.user表裏面授權給200訪問的用戶的權限網
3>、防火牆屏蔽了端口:
首先確認關閉了防火牆
查看/etc/selinux/config文件的配置如下:

selinux=disabled

並且,防火牆服務狀態也是關閉的

service iptables status

如果網絡仍無法連通,嘗試清空100機器上的防火牆策略

iptables -F

4>、密碼錯誤
(如果忘記密碼,進入數據庫修改密碼) 使用正確的密碼再次嘗試連接。
5> 服務沒啓動
“telnet 192.168.1.100 3306” 不通或在服務列表裏面檢查服務沒存在。
當可以通過telnet 方式訪問到100的數據庫,說明網絡和端口都可用。
在從庫上訪問主庫數據庫:

[root@ldw~] mysql -h 192.168.1.100 -P 3306 -uback -p
ERROR 1045 (28000): Access denied for user 'back'@'192.168.1.200' (using password: yes)

1>這種情況可能是輸入密碼錯入了。
在主庫中查看root 用戶的密碼(可能加密了,看不了明文,那就試着改一個新的密碼),用對應的密碼再登陸。
2>可能是權限問題,使用連接的用戶沒有被授權,不允許連接100
在主庫上,進入數據庫,給back用戶重新授權(可試着先授予所有權限,all privilege),並 flush privileges,再次嘗試連接,發現可以了。
3>(這是我遇到的問題)
配置主從過程中,別的網絡管理員修改了主機名(我並不知道這件事),並重啓機器,修改生效。導致,我修改配置文件過後,

service mysql restart 
ERROR! MySQL server PID file could not be found!
Starting MySQL.. ERROR! The server quit without updating PID file (/usr/local/mysql/var/ldw.pid).

數據庫啓動失敗。
這時候,可以通過修改hosts文件,增加一行,如:

192.168.1.100     ldw

然後重啓,數據庫可以正常啓動了。

發佈了18 篇原創文章 · 獲贊 18 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章