mysql 主從複製 實踐

来源:http://www.cnblogs.com/Aiapple/archive/2016/08/21/5793786.html
-Advertisement-
Play Games

非同步主從複製 主從部署步驟: 備份還原 使用mysqldump或者xtrabackup 把主庫現有基礎數據還原到從庫 授權 grant replication slave on *.* 給從庫一個複製binlog的賬號 配置複製,並啟動 從庫上配置複製信息,並指向master 查看主從複製信息 sh ...


非同步主從複製
  主從部署步驟:
  • 備份還原
    • 使用mysqldump或者xtrabackup
    • 把主庫現有基礎數據還原到從庫
  • 授權
    • grant replication slave on *.*
    • 給從庫一個複製binlog的賬號
  • 配置複製,並啟動
    • 從庫上配置複製信息,並指向master
  • 查看主從複製信息
    • show slave status \G
1)備份還原 主:101 從:100 a)主庫備份
aiapple@ubuntu:~$ mysqldump -uroot -p --socket=/tmp/mysqldata/node1/mysql.sock --master-data --all-databases  > all_master.sql
--master-date:記錄備份時binlog位置
aiapple@ubuntu:~$ cat all_master.sql | less
 
--
-- Position to start replication or point-in-time recovery from
--
 
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=6125;
 
--
-- Current Database: `db1`
--

 

b)從庫還原 主庫遠程連接到從庫,使用source還原 從庫添加主庫白名單: mysql> grant all on *.* to [email protected] WITH GRANT OPTION;   設置密碼: mysql> set password for root@'localhost'=password('000000'); Query OK, 0 rows affected (0.00 sec) 主庫添加從庫白名單:
mysql> grant all on *.* to root@192.168.1.100 identified by '000000' with grant option;

 

主庫登陸從庫並還原數據:
aiapple@ubuntu:~$ mysql -uroot -p -h 192.168.1.100
 
mysql> source all_master.sql

 

2)賦權 replication slave
mysql> grant replication slave on *.* to repl@192.168.1.100 identified by 'repl';
Query OK, 0 rows affected (0.00 sec)
  3) 從庫配置複製
#查看幫助信息
? change master to
 
mysql> change master to MASTER_USER='repl';
Query OK, 0 rows affected, 2 warnings (0.03 sec)
 
mysql> change master to MASTER_PASSWORD='repl';
Query OK, 0 rows affected, 2 warnings (0.02 sec)
 
mysql> change master to MASTER_HOST='192.168.1.101';
Query OK, 0 rows affected (0.03 sec)
 
mysql> change master to MASTER_LOG_FILE='mysql-bin.000001';
  4)啟動:
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
 
mysql> show slave status\G;
 
slave_io_running:yes
slave_sql_running:yes
#表示配置成功
 
mysql> show processlist;
+----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+
| Id | User        | Host      | db   | Command | Time | State                                                                       | Info             |
+----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+
|  2 | root        | localhost | NULL | Query   |    0 | init                                                                        | show processlist |
| 16 | system user |           | NULL | Connect |   60 | Waiting for master to send event                                            | NULL             |
| 17 | system user |           | NULL | Connect |   60 | Slave has read all relay log; waiting for the slave I/O thread to update it | NULL             |
+----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+
  註意:
  • 主從server_id應該不同;
  • 主從開啟binlog日誌
  • MASTER_LOG_FILE指定主庫bin_log第一個文件;
  半同步複製
    配置mysql半同步複製 semi-sync   查看有哪些插件
show plugin

1.主從非同步複製搭建

1)主庫全備,備庫恢復
mysqldump -uroot -p123456 --socket=/data/mysql/node1/mysqld.sock --single-transaction -A --master-data=1 > all_db.sql
mysql -utest -ptest -h(從庫IP) -P3306
mysql>source all_db.sql;
2)主庫授權用戶
grant replication slave on *.* to repl@'(從庫IP)' identified by 'repl';
3)從庫配置複製
less all_db.sql|grep "change master to"
change master to master_host='(主庫IP)',master_user='repl',master_password='repl',master_log_file='XXX',master_log_pos=XXX;
start stave;
show slave status\G
4)複製檢驗
主庫:
use db1;
insert into t1 values(10);
從庫:
use db1;
select * from t1;(獲得數據)
主庫:
drop database db2;
從庫:
show databases;(顯示db2被刪除)
5)查看線程
主庫:show processlist;(dump線程)
從庫:show processlist;(IO線程、SQL線程)
6)查看日誌
從庫:cd /data/mysql/node1
cat master.info
cat relay-log.info
  2.主從半同步複製安裝
1)主庫安裝插件
show plugins;
install PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
2)從庫安裝插件
show plugins;
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
3)參數設置
主庫:
show variables like '%semi%';
SET GLOBAL rpl_semi_sync_master_enabled=1;
從庫:
SET GLOBAL rpl_semi_sync_slave_enabled=1;
4)重啟主從複製
從庫:
stop slave;
start slave;
5)狀態檢查
show global status like '%semi%';
6)複製檢查
主庫:
use db1;
insert into t1 values(100);
從庫:
use db1;
select * from t1;(獲得數據)
7)測試延遲
從庫:
stop slave;
主庫:
use db1;
insert into t1 values(1);(被卡10s)
set global rpl_semi_sync_master_timeout=1000;(設置主等從時間1秒)
從庫:
start slave;
stop slave;
主庫:
use db1;
insert into t1 values(88);(被卡1s)

 

註意:rpl_semi_sync_master_timeout主庫等待時間不能設置大,不然會引起主庫雪崩效應;最好在1秒內;  

 

並行複製
  1.MySQL並行複製
#從庫:
show variables like '%slave_par%';
set global slave_parallel_workers=10; 設置sql線程數為10
#重啟 slave
stop slave;
start slave;
#查看線程
show processlist;(十個worker線程)
註:實際上有11個線程,10worker線程,1個調度線程;     部分數據複製
  部分數據複製: 在配置文件中設置 主庫添加參數指定到庫: binlog_do_db=db1 binlog_ignore_db=db1 binlog_ignore_db=db2   或從庫添加參數 可以到表; replicate_do_db=db1 replicate_ignore_db=db1 replicate_do_table=db1.t1 replicate_wild_do_table=db%.%          #配置設置 replicate_wild_ignore_table=db1.%     #1打頭的表   註:建議使用在從庫添加參數,這樣更加靈活可以指定到表級別;   部分複製
1)主庫:
create database db2;
2)從庫部分複製配置
配置文件中增加配置
#vim /data/mysql/my1.cnf(replicate_do_db=db2)
 
重啟mysql
#mysqladmin -uroot --socket=XXX --port=3306 -p123456 shutdown
#/usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/my1.cnf &
 
show slave status;
顯示:replicate_do_db=db2
 
3)測試
主庫:
use db1;
delete from t1;
從庫:
use db1;
select * from t1;(任然保留數據)
主庫:
use db2;
create table user(a int,b int);
從庫:
use db2;
show tables;(查看到user表)
  聯級複製
  聯級複製(A->B->C)
1)從庫:
#vim /data/mysql/my1.cnf(log_slave_updates)
#mysqladmin -uroot --socket=XXX --port=3306 -p123456 shutdown
#/usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/my1.cnf &
2)創建新實例
在主庫伺服器上創建一個從庫2實例
#mysqladmin -uroot --socket=XXX --port=3306 -p123456 shutdown
#kill -9 (mysqld_safe進程號)
#cp -r node1 node2
#vim my.cnf(修改相關參數,埠3307)
#chown -R mysql.mysql node2
#/usr/local/mysql56/bin/mysqld_safe --defaults-file=/data/mysql/my1.cnf &
#/usr/local/mysql56/bin/mysqld_safe --defaults-file=/data/mysql/my2.cnf &
#mysqldump -utest -ptest -hXXX -P3306 -A --master-data=1 > d731.sql(dump從庫1的全備)
#mysql -uroot --socket=/data/mysql/node2/mysqld.sock -p123456 < d731.sql
3)配置從1和從2的主從
從1授權:
grant replication slave on *.* to repl@'(從2IP)' identified by 'repl';
從2配置複製:
less d731.sql|grep "change master to"
change master to master_host='(從1IP)',master_user='repl',master_password='repl',master_log_file='XXX',master_log_pos=XXX;
start stave;
show slave status\G
show processlist;
4)聯級複製測試
主庫:
create database db3;
從1:
show databases;(獲得新建庫)
從2:
show databases;(獲得新建庫)

 

  監控與處理
 
#查看狀態
show slave status;

 

成功與否: slave_sql_running: slave_io_running:   延時多久 seconds_Behind_Master   從庫出現問題時 last_sql_errno last_sql_error last_io_errno last_io_error   複製出錯處理 常見:1062(主鍵衝突),1032(記錄不存在) 解決:
  • 手動處理
  • 跳過複製錯誤:set global sql_slave_skip_counter=1
  複製出錯,大部分因為,主從數據不一致導致的; 最好的辦法還是進行數據主從複製的校驗;percona公司有主從複製校驗工具;                  
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Swift - 多個mask的動畫效果 效果 源碼 https://github.com/YouXianMing/Swift-Animations ...
  • RT 1.effective_prio函數計算進程的動態優先順序。 普通進程除了靜態優先順序,還有動態優先順序,其值的範圍是100(最高優先順序)~139(最低優先順序)。動態優先順序是調度程式在選擇新進程來運行的時候使用的數。它與靜態優先順序的關係用下麵的經驗公式表示: bonus是範圍從0-10的值,值小於5 ...
  • 該系列教程概述與目錄:http://www.cnblogs.com/chengyujia/p/5787111.html 一、知識點講解 當我們點擊系統自帶的按鈕時,按鈕的外觀會發生變化。上篇博文中我們畫了一個三角形按鈕,但點擊還不能變色,下麵我們就來實現點擊變色功能。從知識體繫上我們需要瞭解以下兩個 ...
  • 最近經過實際試驗,總結了InputType幾個常用取值表示的含義: 1、none, text, textVisiblePassword: 無任何輸入限制 2、textMultiLine: 允許多行輸入(預設EditText只允許單行輸入,即不換行) 3、textPassword: 無任何輸入限制,但 ...
  • 3、可能很多小伙伴是綠色的進入註冊表沒有ORACLE這個選項這就令人非常頭疼了。因為可能是32位的原因,你到註冊表的下麵看看HKEY_LOCAL_MACHINE->SOFTWARE->Wow6432Node看看有沒有ORACLE選項,如果還沒有那咱就添加一個;代碼如下建立二個尾碼名為AMERICAN ...
  • 前提 本文僅討論SQL Server查詢時, 對於非複合統計信息,也即每個欄位的統計信息只包含當前列的數據分佈的情況下, 在用多個欄位進行組合查詢的時候,如何根據統計信息去預估行數的。 利用不同欄位的統計信息做數據行數預估的演算法原理,以及SQL Server 2012和SQL Server 2014 ...
  • 一、前言 從20世紀90年代數字化醫院概念提出到至今的20多年時間,數字化醫院(Digital Hospital)在國內各大醫院飛速的普及推廣發展,並取得驕人成績。不但有數字化醫院管理信息系統(HIS)、影像存檔和通信系統(PACS)、電子病歷系統(EMR)和區域醫療衛生服務(GMIS)等成功實施與 ...
  • 昨天一個pgp加密盤壞了,東西全丟了。。。,我的筆記啊!我咋怎麼2呢。。 備份個腳本吧,方便以後手機查看,話說我都快忘記帳號密碼了 備註:腳步恢復時只能恢復到備份前的狀態,如果需要恢復到當前狀態,還需配合binlog,睡覺就這樣 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...