【0】主從數(shù)據(jù)庫操作的注意事項
1.從數(shù)據(jù)庫只能做查詢操作,禁止在從數(shù)據(jù)庫上做 create、detele、update、insert等寫入操作。
【1】前提條件
1.服務(wù)器mysql已經(jīng)安裝
192.168.106.174 mysql(主)
192.168.106.178 mysql(從)
【2】修改mysql(主)上的vim /etc/my.cnf文件,在[mysqld]下添加如下參數(shù):
#每個server服務(wù)的標識,在master/slave環(huán)境中,此變量一定要不一樣。
server-id=1
#此參數(shù)表示在事務(wù)提交時,處理重做日志的方式;此變量有三個可選值0,1,2:
#0:當事務(wù)提交時,并不將事務(wù)的重做日志寫入日志文件,而是等待每秒刷新一次。
#1:當事務(wù)提交時,將重做日志緩存的內(nèi)容同步寫到磁盤日志文件,為了保證數(shù)據(jù)一致性,在replication環(huán)境中使用此值。
#2:當事務(wù)提交時,將重做日志緩存的內(nèi)容異步寫到磁盤日志文件(寫到文件系統(tǒng)緩存中)。
innodb_flush_log_at_trx_commit=0
#1.控制master的是否開啟binlog記錄功能;
#2.二進制文件最好放在單獨的目錄下,這不但方便優(yōu)化、更方便維護。
#3.重新命名二進制日志很簡單,只需要修改[mysqld]里的log_bin選項。
log_bin=master-bin
#通過此來實現(xiàn)master自動刪除binlog
expire_logs_days=14
【3】修改mysql(從)上的vim /etc/my.cnf文件,在[mysqld]下添加如下參數(shù):
#每個server服務(wù)的標識,在master/slave環(huán)境中,此變量一定要不一樣。
server-id=2
#此參數(shù)表示在事務(wù)提交時,處理重做日志的方式;此變量有三個可選值0,1,2:
#0:當事務(wù)提交時,并不將事務(wù)的重做日志寫入日志文件,而是等待每秒刷新一次。
#1:當事務(wù)提交時,將重做日志緩存的內(nèi)容同步寫到磁盤日志文件,為了保證數(shù)據(jù)一致性,在replication環(huán)境中使用此值。
#2:當事務(wù)提交時,將重做日志緩存的內(nèi)容異步寫到磁盤日志文件(寫到文件系統(tǒng)緩存中)。
innodb_flush_log_at_trx_commit=0
#1.控制master的是否開啟binlog記錄功能;
#2.二進制文件最好放在單獨的目錄下,這不但方便優(yōu)化、更方便維護。
#3.重新命名二進制日志很簡單,只需要修改[mysqld]里的log_bin選項,
log_bin=slaver-bin
#從庫做為其他從庫的主庫時 log-slave-updates參數(shù)是必須要添加的,因為從庫要作為其他從庫的主庫,必須添加該參數(shù)。從庫開啟log-bin參數(shù),
#如果直接往從庫寫數(shù)據(jù),是可以記錄log-bin日志的,但是從庫通過I0線程讀取主庫二進制日志文件,然后通過SQL線程寫入的數(shù)據(jù),是不會記錄binlog日志的。
#也就是說從庫從主庫上復(fù)制的數(shù)據(jù),是不寫入從庫的binlog日志的。所以從庫做為其他從庫的主庫時需要在配置文件中添加log-slave-updates參數(shù)。
log-slave-updates
#主從復(fù)制時忽略的庫,如果指定復(fù)制的庫則使用replicate-do-db參數(shù)。
replicate_ignore_db=mysql
#通過此來實現(xiàn)master自動刪除binlog
expire_logs_days=14
【4】
重啟174 、178mysql數(shù)據(jù)庫
【5】把174mysql(主)設(shè)置成主庫,操作如下
使用Xshell或CRT軟件連接174服務(wù)器,執(zhí)行以下命令
#使用用戶root和密碼123456登陸mysql
mysql -uroot -p123456
#主服務(wù)器(174)上創(chuàng)建授權(quán)賬戶,允許從服務(wù)器(178)主機上連接
mysql> grant replication slave on*.*to'rep'@'192.168.106.178'identified by'123456';
#查看主庫的當前binlog狀態(tài)信息
mysql> show master status;
#退出mysql
mysql> quit;
【6】把178mysql(從)設(shè)置成主庫,操作如下
使用Xshell或CRT軟件連接178服務(wù)器,執(zhí)行以下命令
#使用用戶root和密碼123456登陸mysql
mysql –uroot -p123456
--mysql -h 192.168.106.178 -uroot -p123456
#將主服務(wù)器(174)設(shè)為自己的主服務(wù)器,其中master_log_file和master_log_pos參數(shù)是根據(jù)show master status命令查出的主庫當前binlog狀態(tài)信息。
mysql> change master to master_host='192.168.106.174',master_user='rep',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=123;
#開啟slave功能
mysql> start slave;
#查看從庫的狀態(tài)信息
mysql> show slave status\G
#退出mysql
mysql> quit;
【7】主從mysql的測試
1.在mysql(主)上創(chuàng)建測試庫和測試表
#使用用戶root和密碼123456登陸mysql
mysql –uroot -p123456
#創(chuàng)建test_db1數(shù)據(jù)庫
mysql> create database test_db1;
#選擇test_db1數(shù)據(jù)庫
mysql> use test_db1;
#在test_db1庫下創(chuàng)建tab1表
mysql> create table test_table1(id int,name varchar(30));
#在tab1表中插入數(shù)據(jù)
mysql> insert into test_db1.test_table1(id,name) values(1,'zhangsan');
#提交
mysql> commit;
2.在mysql(從)上進行驗證
#使用用戶root和密碼123456登陸mysql
mysql -uroot -p123456
#查詢tab1表中的數(shù)據(jù)
mysql> select * from test_db1.test_table1
【8】常見故障排除
1.mysql(從)數(shù)據(jù)不同步,且Slave_SQL_Running: NO。
#使用用戶root和密碼123456登陸mysql
mysql -uroot -p123456
#查看從庫的狀態(tài)信息,主要關(guān)注Slave_IO_Running,Slave_SQL_Running,Last_SQL_Error等信息。
mysql> show slave status\G;
#停止slave
mysql> stop slave;
#設(shè)置跳過slave上sql的數(shù)量
mysql> set global sql_slave_skip_counter =1;
#啟動slave
mysql> start slave;
#查看從庫的狀態(tài)信息,主要關(guān)注Slave_IO_Running參數(shù)是YES,Slave_SQL_Running參數(shù)是YES,Last_SQL_Error參數(shù)沒有錯誤信息,則說明主從同步正常。
mysql> show slave status\G;