第一步、配置主從,來自於博文
https://www.cnblogs.com/gl-developer/p/6170423.html
下面配置的步驟就直接復制了。
一、准備工作:
1.主從數據庫版本最好一致
2.主從數據庫內數據保持一致
主數據庫:182.92.172.80 /linux
從數據庫:123.57.44.85 /linux
二、主數據庫master修改:
1.修改mysql配置
找到主數據庫的配置文件my.cnf(或者my.ini),我的在/etc/mysql/my.cnf,在[mysqld]部分插入如下兩行:
[mysqld] log-bin=mysql-bin #開啟二進制日志 server-id=1 #設置server-id
2.重啟mysql,創建用於同步的用戶賬號
打開mysql會話shell>mysql -hlocalhost -uname -ppassword
創建用戶並授權:用戶:rel1密碼:slavepass
mysql> CREATE USER 'repl'@'123.57.44.85' IDENTIFIED BY 'slavepass';#創建用戶 mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'123.57.44.85';#分配權限 mysql>flush privileges; #刷新權限
3.查看master狀態,記錄二進制文件名(mysql-bin.000003)和位置(73):
mysql > SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003 | 73 | test | manual,mysql | +------------------+----------+--------------+------------------+
二、從服務器slave修改:
1.修改mysql配置
同樣找到my.cnf配置文件,添加server-id
[mysqld] server-id=2 #設置server-id,必須唯一
2.重啟mysql,打開mysql會話,執行同步SQL語句(需要主服務器主機名,登陸憑據,二進制文件的名稱和位置):
mysql> CHANGE MASTER TO
-> MASTER_HOST='182.92.172.80',
-> MASTER_USER='rep1',
-> MASTER_PASSWORD='slavepass',
-> MASTER_LOG_FILE='mysql-bin.000003',
-> MASTER_LOG_POS=73;
3.啟動slave同步進程:
mysql>start slave;
4.查看slave狀態:
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 182.92.172.80
Master_User: rep1
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000013
Read_Master_Log_Pos: 11662
Relay_Log_File: mysqld-relay-bin.000022
Relay_Log_Pos: 11765
Relay_Master_Log_File: mysql-bin.000013
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
...
當Slave_IO_Running和Slave_SQL_Running都為YES的時候就表示主從同步設置成功了。接下來就可以進行一些驗證了,比如在主master數據庫的test數據庫的一張表中插入一條數據,在slave的test庫的相同數據表中查看是否有新增的數據即可驗證主從復制功能是否有效,還可以關閉slave(mysql>stop slave;),然后再修改master,看slave是否也相應修改(停止slave后,master的修改不會同步到slave),就可以完成主從復制功能的驗證了。
還可以用到的其他相關參數:
master開啟二進制日志后默認記錄所有庫所有表的操作,可以通過配置來指定只記錄指定的數據庫甚至指定的表的操作,具體在mysql配置文件的[mysqld]可添加修改如下選項:
# 不同步哪些數據庫 binlog-ignore-db = mysql binlog-ignore-db = test binlog-ignore-db = information_schema # 只同步哪些數據庫,除此之外,其他不同步 binlog-do-db = game
如之前查看master狀態時就可以看到只記錄了test庫,忽略了manual和mysql庫。
第二步、踩坑跳坑
按照上面的配置發現
Slave_IO_Running: Connecting # 出現錯誤,IO線程處於正在連接狀態
於是乎關閉了主從的防火牆:
iptables -F # 關閉防火牆
重新配置了slave還是這樣;
在主服務器上操作:
select user,host,password from mysql.user;

rep1這個賬號是存在的。
所以看看權限對不對:

沒有權限,這次發現問題不對了;
當時在heidisql中確實存在賬號及及權限

所以我把rep1這個賬號刪除,在heidisql中重新創建賬戶以及授權。再FLUSH PRIVILEGES;
發現
Slave_IO_Running: Yes
Slave_SQL_Running: No
Slave_IO_Runing好了,Slave_SQL_Running變成No了,於是重新配一次Slave后發現全部變成Yes.
參考博文
https://www.cnblogs.com/hellotracy/articles/5183057.html
外鏈掛兩個

