基本流程
主庫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
然後重啓,數據庫可以正常啓動了。