# :-: **Mysql 5.7 復制**
[TOC]
## 主從復制基本知識了解
1. Mysql復制為 **異步** 復制
2. 主從復制原理 Master 主庫 Slave 從庫

3. TPS 并發讀寫數 一般在 幾百上下/s 也有部分可以達到 幾千上下/s
4. 一般主從之間 避免延遲導致的數據 **延遲性** 可使用 **假一致性** (必要的時候 從主庫讀取實時數據 不必要的用戶 依舊讀取從庫數據)
5. Mysql復制 基于**BinLog**日志
> 日志存在三種格式
> * Statement:BinLog中存儲SQL語句,存儲日志量最小
> * Row:存儲event數據,存儲量大,但是不能直接的進行讀取
> * Mixed:介于兩者之間的存儲方式,對不確定的操作使用Row記錄,如果每天數據操作量很大,產生日志較多,可以考慮Mixed格式。
> 注意:一般主從復制 不適用Statement日志格式,避免影響主從數據不一致。
6. 
--binglog-do-db : 同步數據庫
--binglog-ignore-db : 不同步數據庫
7. 
8. Mysql 復制類型
>* [ √ ] 基于二進制日志復制 (Mysql5.5之前唯一支持的復制類型)
>* [ √ ] 使用GTID(全局事務標識符)完成基于事務的復制
9. Mysql 支持半同步復制。
 5.6
 5.7
*****
## 主從復制搭建 (主從均為Linux服務器)
>### 一、創建復制用戶 (主庫)
```
——不推薦使用——
IP:192.168.1.100 或 192.168.1.%匹配整個1網段
grant replication slave on *.* to '用戶名'@'從庫IP' identified by '密碼';
——推薦——
先創建用戶
create user '用戶名'@'從庫IP' identified by '密碼';
授權用戶
grant replication slave on *.* to 用戶名@'從庫IP';
```
>### 二、使用mysqldump導出數據(主庫)
```
進入到需要導出的文件位置中
例如 導出到 /tmp/下
mysqldump --single-transaction --master-data=2 --triggers --routines --all-databases -uroot -p> all.sql
按照提示輸入密碼
```
> ### 三、將導出sql文件傳入 從庫 中(主庫)
```
scp all.sql root@192.168.2.202:/tmp/
```
>### 四、查看all.sql中的MASTER_LOG_FILE、MASTER_LOG_POS(從庫)
```
more all.sql
查看 CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;
MASTER_LOG_FILE
MASTER_LOG_POS
將兩個值記錄下來
```
>### 五、從庫配置
```
此處用戶密碼 使用 主庫create生成的用戶密碼
mysql>change master to marset_host='主庫IP',
>master_user = '用戶',
>master_password='密碼',
>master_log_file=上面查看的 MASTER_LOG_FILE值,
>master_log_pos=上面查看的 MASTER_LOG_POS值;
```
>### 六、開啟slave
```
start slave;
```
>### 七、 查看slave status

```
show slave status \G;
Slave_IO_Running: No
Slave_SQL_Running: Yes
查看 slave鏈接狀態 都為yes時 連接成功
連接失敗時 查看此信息
Last_IO_Errno: 1593
Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
```
> **中間可能會因為個人的環境問題 有一些報錯,相信大家都可以動手解決掉,解決問題的同時,學習到更廣面的知識**
*****
## 擴展知識
>### 主動延時復制
在從庫中進入MySQL 進行設置 主動延時復制
**設置延時操作時 先關閉slave服務**
`mysql> change master to master_delay=3600;`
> 設置完成之后,輸入一下命令查詢
`mysql> use performance_schema;
`
`mysql> show tables;`

> replication_***開頭的表 都是主從配置的視圖表
`mysql>select * from replication_applier_configuration ;`

CHANNEL_NAME : 復制鏈路名稱,MySQL支持多鏈路復制,可以存在一條空字符串的channel_name,當存在多條復制鏈路時鏈路的channel_name都不能一樣。
DESIRED_DELAY:主從復制延遲,該字段用來配置當主進行操作之后延遲多少秒后才被復制到slave節點。
`mysql>select * from replication_applier_status`;

SERVICE_STATE:復制狀態
REMAINING_DELAY:下次主從同步時間
多線程復制視圖表
replication_applier_status_by_coordinator
replication_applier_status_by_worker
主從同步配置信息
replication_connection_configuration
鏈接狀態
replication_connection_status
## 基于日志復制 在線轉換為 基于事務的復制

**基于事務的復制 對于數據的完整性 更加安全 推薦使用 基于事務的復制**
*****
### 轉換分為九個步驟


### 以下為實際操作代碼塊
#### 查看版本信息
`mysql> show variables like 'version';
`
#### 查看服務器gtid_mode
`mysql> show variables like 'gtid_mode';`
#### 設置gtid_consistency (主庫和從庫)
`mysql> set @@global.enforce_gtid_consistency=warn;
`
#### 查看當前的錯誤日志配置 查詢日志位置
`mysql> show variables like 'log_error';`
查看錯誤日志 確定沒有報錯的情況下
#### 再次設置gtid_consistency (主庫和從庫)
`
mysql> set @@global.enforce_gtid_consistency=on;
`
> gtid_mode 四種值 只能按順序設置
> off 關閉
> off_permissive 關閉準備
> on_permissive 啟動準備
> on 啟動
#### 修改gtid_mode(主庫和從庫)
`mysql> set @@global.gtid_mode = off_permissive;
`
`mysql> set @@global.gtid_mode = on_permissive;
`
#### 查看是否有匿名復制(日志復制)
為空即可
`mysql> show status like 'ongoing_anonymounse_transcation_count';`
#### 確認沒有匿名復制之后繼續修改gtid_mode(主庫和從庫)
`mysql> set @@global.gtid_mode = on;
`
然后查看一下gtid_mode
`mysql> show variables like 'gtid_mode';`
#### 重啟slave(從庫)
`mysql> stop slave`
`mysql> change master to master_auro_position=1;`
`mysql> start slave`
- 關于我們
- ApiCloud
- 支付模塊
- 微信支付--wxPay(客戶端)
- 微信支付--wxPay(服務端)
- 支付寶支付--aliPay(客戶端配置)
- 支付寶支付--aliPay(服務端配置)
- DoT模板
- 緩存模塊
- 監聽模塊
- 百度定位模塊
- 設置狀態欄字體顏色
- 選擇城市插件
- 跨頁面執行方法
- 安卓-點擊返回事件
- 上傳圖片模塊
- 點擊彈出放大圖片層
- 魅族手機apiready問題
- 分享
- 跨win或frm執行腳本
- 關于ios數字自動識別成手機號
- 百度地圖bMap
- 語音識別模塊
- tabBarMenu底部導航
- 第三方登錄
- QQ網站和appQQ賬號的統一問題解決
- 微信登錄
- QQ登錄
- 微博登錄
- 上拉加載、下拉刷新模塊
- 圖片緩存
- 文件和圖片緩存機制分享
- PHP
- 支付寶及時到賬
- no input file specified報錯解決
- thinkphp 整合kindeditor
- 整合tpshop微信模塊到thinkcmf中
- thinkphp3.1.3整合支付寶
- 網站接入QQ OAuth2.0登錄教程
- ThinkPHP整合百度編輯器Ueditor
- PHP加快執行效率的寫法規范
- ThinkPHP操作大全
- PHP操作大全
- Thinkphp中SQL操作返回值
- php5.3 foreach 使用&(與運算符)引用賦值要注意的問題
- mysql給字段追加值
- 阿里大魚短信平臺接入
- Navicat 導出 Mysql 數據字典
- php 面向對象全面教程
- PHP5下調用SOAP
- PHP處理時間格式添加空格
- 偽裝URL請求(.htaccess)
- url請求參數加解密
- JS插件
- artDialog彈窗-頁面傳值
- jQuery點擊遮罩彈出層固定居中
- jeBox原生彈窗
- bxslider輪播
- js生成指定位數隨機數
- 發送短信倒計時
- js調試
- jQuery.validator 表單驗證規則
- Swiper 輪播
- 獲得焦點時-圖片抖動
- uploadify無刷新上傳圖片
- 導航下拉隱藏上拉顯示
- 獲得焦點時-加黑色蒙版
- jquery.qrcode.js生成二維條形碼(支持中文)
- jquery.qrcode.js生成二維條形碼(官方不支持中文)
- nth-child 選擇器
- 無刷新點擊實現加載更多數據
- 刷新頁面方法
- 判斷滾動條向上向下
- 跨瀏覽器復制jQuery-zclip
- js校驗表單后提交表單的三種方法
- 用JS判斷下拉框是否選中
- div中滾動
- 提交時彈出模態框
- 當圖片不顯示時替換方法
- 前端
- CSS3
- HTML5
- css技巧
- 移動端rem
- Flex布局
- 電商詳情滾動條監聽
- VueCircleMenu圓環按鈕
- iframe自適應頁面高度
- 百度Echart
- input:radio改變選中顏色
- Jquery
- 響應式布局基本實現Media Query
- 循環輸出只輸出新內容
- 小程序
- wx.request坑
- 概要
- git操作
- 本地記住密碼
- 操作
- 生成ssh公鑰 記住密碼
- git避坑
- ES6學習手札
- 調試小插件
- 谷歌插件Postman
- PHP調試助手
- WordPress
- 緩存服務器Redis
- 在線代碼運行 Docker
- 在ubuntu下怎樣安裝https
- BrowserSync 瀏覽器同步測試工具
- getmarkman高效的設計稿標注、測量工具
- PHPstrom軟件
- 服務器
- linux 安裝搭建服務器配置及nginx配置
- tpshop的nginx 服務器配置方法
- (服務器訪問文件404解決辦法)IIS 之 添加MIME擴展類型及常用的MIME類型列表
- mysql部分
- mysql緩存
- MySql監控工具--mytop
- MySql主從搭建
- mysql優化
- Mysql 復制 (主從復制)
- iOS開發筆記 - 上線流程
- VUE避坑指南
- 從零開始學Vue
- Vue-cli
- Webpack
- VUE小記
- npm打包空白
- 打包背景圖片/項目圖片不顯示
- VUE避坑指南/elementUI upload 自定義http-request上傳
- 關于watch監聽路由重復加載方法
- 解決加載內容的時候閃動問題
- vuecli沒有network訪問地址
- python學習
- python初始
- pytho內置函數大全
- win10 播放器播放TS文件問題
- 設計網站
- VUE避坑指南/VUE-CLI部署空白
- swiper使用問題
- uni-app學習手冊
- 目錄結構
- layUI
- nodesass版本sassloader版本問題