您好,登錄后才能下訂單哦!
幾種常見的Replication拓撲結構:
1.單master----多slave
slave之間互不通信,只和master通信
適用于讀壓力比較大的應用場景,將讀操作分布到不同的slave中,減小master壓力
2.多master----單slave
mysql貌似暫不支持,個人認為通過slave多實例實現
3.主動模式的Master----Master
當前master是另一master的slave
問題:同時更新一個操作產生沖突
4.主動-被動模式的Master----Master
只能有一個可讀
5.級聯復制的Master----Slaves----Slaves
結構1中的replication導致slave連上master的線程過多,replication的壓力過大
級聯可以一定程度上緩解master的壓力,但是需要設置log_slave_updates=1。
每級slave是下級slave的master,所有重做中繼日志同樣需要寫入binlog中
下面安裝的是最基本的單slave單master
第一步:準備工作
操作系統:Centos7.1
數據庫:mysql-5.6.30
主host:172.17.220.145
從host:172.17.220.220
第二步:設置防火墻
Centos7.1默認防火墻為firewalld,需要通過yum安裝iptables-service
分別在主從服務器中:
vi /etc/sysconfig/iptables
在“-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT”后增加
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
systemctl start iptables.service
第三步:修改主數據庫的配置文件my.cnf
server-id=145(主服務器的ID值,建議為ip最后一段)
log_bin = /opt/mysql/data1/mysql-bin.log(二進制日志)
log_slave_updates = 0 (0表示slave將復制事件寫進自己的二進制日志)
binlog_format=MIXED (二進制日志類型)
第四步:修改從數據庫的配置文件my.cnf
server-id=224
log_bin = /opt/mysql/data1/mysql-bin.log(如果該slave為其他slave的master,必須開啟二進制)
#relay_log=
read_only=1 (防止從庫修改數據,從庫只讀)
log_slave_updates = 1
第五步:創建master用戶
登錄主數據庫
mysql> GRANT REPLICATION SLAVE ON *.* TO 'mypri'@'172.17.220.145' IDENTIFIED BY ‘123456’;
第六步:重啟主從數據庫
service mysql restart
第七步:假如主庫存在數據
5.1 先對主庫鎖表,不讓數據再進行寫入
mysql> flush tables with read lock;
5.2 主庫 mysqldump -uroot -p --all-databases >all.sql(導出所有數據庫)
5.3 若從庫不存在數據,則導入all.sql到從庫
mysql -uroot -p <all.sql
從庫本身存在數據,先備份從庫,再刪除從庫中的數據,僅保留mysql、information_schema、performance_schema
5.4 主數據庫 unlock table
5.5 主數據庫 show master status; 獲取master_log_file與master_log_pos
第八步: 從服務器slave啟動
change master to master_host='172.17.220.145',
master_user='mypri',
master_password='123456',
master_log_file='mysql-bin.000021',(show master status獲取)
master_log_pos=1212, (show master status獲取)
master_connect_retry=60;(超時重連)
啟動slave:start slave;
show slave status\G 驗證是否成功
成功與否主要看:
Slave_IO_Running=Yes
Slave_SQL_Running=Yes
錯誤信息:
1. slave have equal MySQL Server UUIDs
這個問題的主要原因是本人進行了虛擬機復制,導致主從數據庫的server_id或server_uuid一致
查看server_id:show variables like 'server_id';
查看server_uuid:show variables like 'server_uuid';
server_id一致,修改my.cnf文件
server_uuid一致
刪除從庫中的$data_path/data/auto.cnf
然后重啟從庫
查看主庫上的幾個重要參數:
show variables like '%autocommit%'; 自動提交是否開啟
show variables like '%innodb_flush_method%'; innodb引擎的表刷新方式 O_DIRECT
show variables like '%sync_binlog%';
sync_binlog=0:不主動刷新二進制日志文件的數據到磁盤上,由操作系統決定
sync_binlog=N:向二進制日志文件寫入N條SQL或N個事務后,二進制日志文件的數據刷新到磁盤上;
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。