在兩臺服務(wù)器上安裝mysql
為黃梅等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計(jì)制作服務(wù),及黃梅網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、黃梅網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!
#apt-get install mysql-server -y
創(chuàng)建同步帳戶
我這里就直接使用的數(shù)據(jù)庫默認(rèn)用戶root
在ubuntu4上:
mysql grant replication slave on *.* to 'root'@'192.168.2.5' identified by '12345678';
mysql flush privileges;
在ubuntu5上:
mysql grant replication slave on *.* to 'root'@'192.168.2.4' identified by '12345678';
mysql flush privileges;
修改mysql的配置文件
/etc/mysql/my.cnf
在Ubuntu4 上:
【code】
[mysqld]
binlog-do-db=db_rocky #需要記錄進(jìn)制日志的數(shù)據(jù)庫.如果有多個(gè)數(shù)據(jù)庫可用逗號分隔,或者使用多個(gè)binlog-do-db選項(xiàng)
binlog-ignore-db=mysql #不需要記錄進(jìn)制日志的數(shù)據(jù)庫.如果有多個(gè)數(shù)據(jù)庫可用逗號分隔,或者使用多個(gè)binlog-do-db選項(xiàng)
replicate-do-db=db_rocky #需要進(jìn)行同步的數(shù)據(jù)庫.如果有多個(gè)數(shù)據(jù)庫可用逗號分隔,或者使用多個(gè)replicate-do-db選項(xiàng)
replicate-ignore-db=mysql,information_schema #不需要同步的數(shù)據(jù)庫.如果有多個(gè)數(shù)據(jù)庫可用逗號分隔,或者使用多個(gè)replicate-ignore-db選項(xiàng)
#同步參數(shù):
server-id=1
log_bin = /var/log/mysql/mysql-bin
#保證slave掛在任何一臺master上都會接收到另一個(gè)master的寫入信息
log-slave-updates
sync_binlog=1
auto_increment_offset=1
auto_increment_increment=2
slave-skip-errors=all #過濾掉一些沒啥大問題的錯誤
【/code】
在Ubuntu5上:
[mysqld]
server-id=2 #設(shè)置一個(gè)不同的id、注意這里在my.cnf里面有個(gè)默認(rèn)值是 1 、把默認(rèn)值改掉、而不能新增一個(gè)server-id
binlog-do-db=db_rocky #需要記錄二進(jìn)制日志的數(shù)據(jù)庫.如果有多個(gè)數(shù)據(jù)庫可用逗號分隔,或者使用多個(gè)binlog-do-db選項(xiàng)
binlog-ignore-db=mysql #不需要記錄進(jìn)制日志的數(shù)據(jù)庫.如果有多個(gè)數(shù)據(jù)庫可用逗號分隔,或者使用多個(gè)binlog-ignore-db選項(xiàng)
#需要同步的數(shù)據(jù)庫
replicate-do-db=db_rocky
#需要進(jìn)行同步的數(shù)據(jù)庫.如果有多個(gè)數(shù)據(jù)庫可用逗號分隔,或者使用多個(gè)binlog-do-db選項(xiàng)
replicate-ignore-db=mysql,information_schema #不需要同步的數(shù)據(jù)庫.如果有多個(gè)數(shù)據(jù)庫可用逗號分隔,或者使用多個(gè)binlog-do-db選項(xiàng)
#同步參數(shù):
#保證slave掛在任何一臺master上都會接收到另一個(gè)master的寫入信息
log-slave-updates
sync_binlog=1
auto_increment_offset=2
auto_increment_increment=2
slave-skip-errors=all #過濾掉一些沒啥大問題的錯誤
分別重啟服務(wù)器上的mysql服務(wù)
分別在服務(wù)器上查看做為主服務(wù)器狀態(tài)
mysql flush tables with read lock;#防止進(jìn)入新的數(shù)據(jù)
mysql show master status\G;
分別在服務(wù)器上用change master語句指定同步位置 :
在ubuntu4上:
change master to master_host='192.168.2.5',master_user='root',master_password='12345678',master_log_file='mysql-bin.000001',master_log_pos=107;
在Ubuntu5上:
change master to master_host='192.168.2.4',master_user='root',master_password='12345678',master_log_file='mysql-bin.000001',master_log_pos=107;
在配置Mysql數(shù)據(jù)庫主從復(fù)制集群的時(shí)候要保證:
1.主從服務(wù)器操作系統(tǒng)版本和位數(shù)一致。
2.Mysql版本一致。
為了保證穩(wěn)定性,最好服務(wù)器操作系統(tǒng)和Mysql數(shù)據(jù)庫環(huán)境一致。
CentOS服務(wù)器上Mysql的安裝方法可以參見博客:
服務(wù)器配置:
Master:192.168.1.18
Slave:192.168.1.16
Master(192.168.1.18)服務(wù)器:
1.編輯/etc/my.cnf
[root@jhq0229 ~]# vim /etc/my.cnf
2.配置
[plain] view plain copy print?
[mysqld]
datadir=/data/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
#主從復(fù)制配置
innodb_flush_log_at_trx_commit=1
sync_binlog=1
#需要備份的數(shù)據(jù)庫
binlog-do-db=orders
#不需要備份的數(shù)據(jù)庫
binlog-ignore-db=mysql
#啟動二進(jìn)制文件
log-bin=mysql-bin
#服務(wù)器ID
server-id=1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
若沒有配置binlog-do-db和binlog_ignore_db,表示備份全部數(shù)據(jù)庫。
3.重啟Mysqld服務(wù)
[root@jhq0229 ~]# service mysqld restart
4.為從Mysql創(chuàng)建用戶
登錄
[root@jhq0229 ~]# mysql -uroot -p
Enter password:
創(chuàng)建用戶
mysql create user 'mastj'@'192.168.1.16' identified by '123456';
配置主從復(fù)制權(quán)限
mysql grant replication slave on *.* to 'mastj'@'192.168.1.16' identified by '123456';
若orders數(shù)據(jù)庫中已經(jīng)有數(shù)據(jù),還需要:
鎖定數(shù)據(jù)庫
mysql flush tables with read lock;
將數(shù)據(jù)導(dǎo)入到從數(shù)據(jù)庫,方法有多種,我是用Navicat復(fù)制的,復(fù)制完成后:
查看master狀態(tài)并解鎖:
[html] view plain copy print?
mysql show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 | 2005 | orders | mysql | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql unlock tables;
Slave(192.168.1.16)服務(wù)器:
1.配置服務(wù)ID
[root@jhq0113 ~]# vim /etc/my.cnf
在[mysqld]下面加入
server-id=2
重啟Mysql服務(wù)
[root@jhq0113 ~]# service mysqld restart
2.配置復(fù)制
登錄mysql
[root@jhq0113 ~]# mysql -uroot -p
執(zhí)行
mysql change master to master_host='192.168.1.18',
master_user='mastj',
master_password='123456',
master_port=3306,
master_log_file='mysql-bin.000003',
master_log_pos=2005,
master_connect_retry=10;
參數(shù)詳解:
master_host:主服務(wù)器的IP。
master_user:配置主服務(wù)器時(shí)建立的用戶名
master_password:用戶密碼
master_port:主服務(wù)器mysql端口,如果未曾修改,默認(rèn)即可。
master_log_file:日志文件名稱,填寫查看master狀態(tài)時(shí)顯示的File
master_log_pos:日志位置,填寫查看master狀態(tài)時(shí)顯示的Position
master_connect_retry:重連次數(shù)
啟動進(jìn)程
mysql start slave;
檢查主從復(fù)制狀態(tài)
[plain] view plain copy print?
mysql show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.18
Master_User: mastj
Master_Port: 3306
Connect_Retry: 10
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 2369
Relay_Log_File: jhq0113-relay-bin.000002
Relay_Log_Pos: 647
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
若Slave_IO_Running和Slave_SQL_Running均為Yes,則表示連接正常。
此時(shí)就可以測試主從復(fù)制了。
1、挑選一臺服務(wù)器作為新主庫
可以是現(xiàn)有的slave,也可以是新擴(kuò)容出來的slave,但是歸根結(jié)底它的角色是slave
2、在new master上設(shè)置log-slave-update,用來記錄中繼的binlog。
3、交替使用slave start until 和 change master to命令,將現(xiàn)有結(jié)構(gòu)從A-B 切換成A-B-C結(jié)構(gòu),即級聯(lián)結(jié)構(gòu)。
其中A=old master,B=new master,C=slaves
4、設(shè)定new master的read_only=OFF,保證新主庫可寫
5、建立old master和new master的雙主結(jié)構(gòu),保證切換失敗之后可以回退,并且數(shù)據(jù)一致。
需要注意的時(shí)auto_increment,如果有字段有這個(gè)屬性,需要在old 和 new master上分別設(shè)置如下來規(guī)避自增沖突。