1. 程式人生 > >mysql 5.7主從安裝和配置

mysql 5.7主從安裝和配置

crash master rpm 情況下 並發 本地 隔離級別 cover mirror

本文主要介紹mysql 5.7主從復制,轉載請註明出處

下載地址

模塊 版本 下載地址
mysql 5.7 https://dev.mysql.com/downloads/mysql/
libaio(可選) 0.3.110 http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus/x86_64/RPMS.classic//libaio-0.3.110-alt1.1.x86_64.rpm
net-tools(可選) 2.0.22 http://mirror.centos.org/centos/7/os/x86_64/Packages/net-tools-2.0-0.22.20131004git.el7.x86_64.rpm

卸載系統自帶的mariadb

[root@DTDREAM-TRAINING-HUB-01 ~]# rpm -qa|grep mariadb
mariadb-libs-5.5.52-1.el7.x86_64
[root@DTDREAM-TRAINING-HUB-01 ~]# rpm remove mariadb-libs -y

安裝 mysql 依賴模塊(可選,一般系統都安裝了)

[root@DTDREAM-TRAINING-HUB-01 soft]# rpm -ivh libaio-0.3.110-alt1.1.x86_64.rpm
[root@DTDREAM-TRAINING-HUB-01 soft]# rpm -Uvh net-tools-2.0-0.22.20131004git.el7.x86_64.rpm

安裝 mysql

tar -xvf mysql-5.7.21-1.el7.x86_64.rpm-bundle.tar  -C /opt/data/soft/mysql ; cd /opt/data/soft/mysql
[root@DTDREAM-TRAINING-HUB-01 ~]# rpm -ivh mysql-community-*.rpm

### 修改 mysql 默認配置

刪除/etc/my.cnf原有內容並復制以下配置

[mysqld]

######## basic settings ########

# 服務器 ID , 主從唯一標識
server_id=10

# 監聽端口
#port=3306

# 運行用戶
user=mysql

# 監聽IP地址, 如果是127.0.0.1, 表示僅本機訪問
#bind_address=127.0.0.1

# 數據修改是否自動提交, 為0不自動提交
autocommit=1

# 服務器字符集 , utf8mb4為超字符集, 兼容UTF-8並可存儲4字節的圖片
character_set_server=utf8mb4

# 禁用DNS主機名查找, 啟用以後用內網地址向mysqlslap請求響應快一半
#skip_name_resolve=1

# 最大連接數
max_connections=2048

# 主機連接錯誤次數等於max_connect_errors(默認10)時 , 再次嘗試連接將被屏蔽. 可有效防止DDOS攻擊
max_connect_errors=1000

# 數據存儲目錄
datadir=/opt/data/mysql

# socket方式運行文件存儲路徑
socket=/opt/data/mysql/mysql.sock

# 進程PID文件
pid_file=/opt/data/mysql/mysqld.pid

# 數據庫事務隔離級別
# 1. READ-UNCOMMITTED(讀取未提交內容)級別
# 2. READ-COMMITTED(讀取提交內容)
# 3. REPEATABLE-READ(可重讀)
# 4. SERIERLIZED(可串行化)
# 默認級別REPEATABLE-READ
transaction_isolation=READ-COMMITTED

explicit_defaults_for_timestamp=1

# join是ALL,index,rang或者Index_merge的時候使用的buffer
join_buffer_size=128M

# 內部內存臨時表的最大值
tmp_table_size=128M

# 臨時文件目錄
tmpdir=/tmp

# 最大接受的數據包大小
max_allowed_packet=16M

# sql_mode 模式, 定義了你MySQL應該支持的sql語法, 對數據的校驗等等, 限制一些所謂的不合法操作
sql_mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER"

# 服務器關閉交互式連接前等待活動的秒數
interactive_timeout=60

# 服務器關閉非交互連接之前等待活動的秒數
wait_timeout=60

# 讀入緩沖區的大小
read_buffer_size=16M

# 隨機讀緩沖區大小
read_rnd_buffer_size=32M

# connection緩存
sort_buffer_size=32M

######## log settings ########

# 錯誤日誌文件
log_error=/opt/data/mysql/mysqld.log

# 是否開啟慢查詢日誌收集, 1為啟用, 0為禁用
#slow_query_log=1

# 慢查詢日誌文件
#slow_query_log_file=/opt/data/mysql/log/slow.log

# 記錄未使用索引的語句
log_queries_not_using_indexes=1

# 記錄管理型慢SQL
log_slow_admin_statements=1

# 記錄 slave 產生的慢查詢
log_slow_slave_statements=1

# 每分鐘記錄到日誌的未使用索引的語句數目, 超過這個值後只記錄語句數量和花費的總時間
log_throttle_queries_not_using_indexes=10

# 日誌過期時間天數
expire_logs_days=90

# binlog日誌文件大小
max_binlog_size=100M

# 記錄慢查詢超時時間, 默認為秒
long_query_time=3

# 查詢返回少於該參數指定行的SQL不被記錄到慢查詢日誌
min_examined_row_limit=100

初始化 mysql

[root@DTDREAM-TRAINING-HUB-01 mysql]# mysqld --initialize --user=mysql

查看 初始化密碼

grep "password" /opt/data/mysql/mysqld.log
2018-05-04T04:25:59.753312Z 1 [Note] A temporary password is generated for root@localhost: k_muRLmOB1f3

啟動 mysql

[root@DTDREAM-TRAINING-HUB-01 mysql]# systemctl start mysqld

檢查 mysql 服務狀態

[root@DTDREAM-TRAINING-HUB-01 mysql]#systemctl status mysqld
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2018-05-04 13:00:05 CST; 44min ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 10706 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
  Process: 10669 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
 Main PID: 10709 (mysqld)
   CGroup: /system.slice/mysqld.service
           └─10709 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid

May 04 13:00:04 dtdream-dtopen-prod-db-02 systemd[1]: Starting MySQL Server...
May 04 13:00:05 dtdream-dtopen-prod-db-02 systemd[1]: Started MySQL Server.

設置 mysql 服務自啟動

[root@DTDREAM-TRAINING-HUB-01 mysql]# systemctl enable mysqld

檢查 mysql 服務自啟動狀態

[root@DTDREAM-TRAINING-HUB-01 mysql]# systemctl list-unit-files --type=service | grep -i mysqld
mysqld.service                                enabled
[email protected]                               disabled

登錄 mysql

[root@DTDREAM-DTOPEN-TRAINING-APP-01 mysql]# mysql -h 127.0.0.1 -uroot -pk_muRLmOB1f3
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.21

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

修改初始化密碼

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'DtDream0209';
Query OK, 0 rows affected (0.01 sec)

切換到 mysql 數據庫

mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

查詢 root 登錄限制

mysql> select user,host from user;
+---------------+-----------+
| user          | host      |
+---------------+-----------+
| mysql.session | localhost |
| mysql.sys     | localhost |
| root          | localhost |
+---------------+-----------+
3 rows in set (0.00 sec)

修改 root 登錄限制為允許開放所有登錄方式

mysql> update user set host = '%' where user = 'root';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

在 master 配置 mysql 主從 基於日誌復制

在 master 創建主從同步賬號建立一個帳戶 "dt_sync" , 且只能允許從 從服務器(172.16.0.167) 地址登陸, 密碼是 dtdreamsync

mysql> grant replication slave on *.* to 'dt_sync'@'172.16.0.167' identified by 'dtdreamsync';
Query OK, 0 rows affected, 1 warning (0.00 sec)

刷新權限

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

查詢主從同步賬號

mysql> select user,host from user;
+---------------+--------------+
| user          | host         |
+---------------+--------------+
| root          | %            |
| dt_sync       | 172.16.0.167 |
| mysql.session | localhost    |
| mysql.sys     | localhost    |
+---------------+--------------+
4 rows in set (0.00 sec)

退出 mysql 命令行

mysql> quit

創建日誌目錄

[root@DTDREAM-TRAINING-HUB-01 etc]# mkdir -p /opt/data/mysql/log
[root@DTDREAM-TRAINING-HUB-01 log]# mkdir -p /opt/data/mysql/redolog/
[root@DTDREAM-TRAINING-HUB-01 log]# mkdir -p /opt/data/mysql/undolog/

日誌目錄權限修改

[root@DTDREAM-TRAINING-HUB-01 mysql]# chown -R mysql:mysql /opt/data/mysql/log
[root@DTDREAM-TRAINING-HUB-01 mysql]# chown -R mysql:mysql /opt/data/mysql/redolog
[root@DTDREAM-TRAINING-HUB-01 mysql]# chown -R mysql:mysql /opt/data/mysql/undolog

修改 master 配置文件

刪除/etc/my.cnf原有內容並復制以下優化內容到配置文件中

[mysqld]

######## basic settings ########

# 服務器 ID , 主從唯一標識
server_id=10

# 監聽端口
#port=3306

# 運行用戶
user=mysql

# 監聽IP地址, 如果是127.0.0.1, 表示僅本機訪問
#bind_address=127.0.0.1

# 數據修改是否自動提交, 為0不自動提交
autocommit=1

# 服務器字符集 , utf8mb4為超字符集, 兼容UTF-8並可存儲4字節的圖片
character_set_server=utf8mb4

# 禁用DNS主機名查找, 啟用以後用內網地址向mysqlslap請求響應快一半
skip_name_resolve=1

# 最大連接數
max_connections=2048

# 主機連接錯誤次數等於max_connect_errors(默認10)時 , 再次嘗試連接將被屏蔽. 可有效防止DDOS攻擊
max_connect_errors=1000

# 數據存儲目錄
datadir=/opt/data/mysql

# socket方式運行文件存儲路徑
socket=/opt/data/mysql/mysql.sock

# 進程PID文件
pid_file=/opt/data/mysql/mysqld.pid

# 數據庫事務隔離級別
# 1. READ-UNCOMMITTED(讀取未提交內容)級別
# 2. READ-COMMITTED(讀取提交內容)
# 3. REPEATABLE-READ(可重讀)
# 4. SERIERLIZED(可串行化)
# 默認級別REPEATABLE-READ
transaction_isolation=READ-COMMITTED

explicit_defaults_for_timestamp=1

# join是ALL,index,rang或者Index_merge的時候使用的buffer
join_buffer_size=128M

# 內部內存臨時表的最大值
tmp_table_size=128M

# 臨時文件目錄
tmpdir=/tmp

# 最大接受的數據包大小
max_allowed_packet=16M

# sql_mode 模式, 定義了你MySQL應該支持的sql語法, 對數據的校驗等等, 限制一些所謂的不合法操作
sql_mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER"

# 服務器關閉交互式連接前等待活動的秒數
interactive_timeout=60

# 服務器關閉非交互連接之前等待活動的秒數
wait_timeout=60

# 讀入緩沖區的大小
read_buffer_size=16M

# 隨機讀緩沖區大小
read_rnd_buffer_size=32M

# connection緩存
sort_buffer_size=32M

######## log settings ########

# 錯誤日誌文件
log_error=/opt/data/mysql/mysqld.log

# 是否開啟慢查詢日誌收集, 1為啟用, 0為禁用
slow_query_log=1

# 慢查詢日誌文件
slow_query_log_file=/opt/data/mysql/log/slow.log

# 記錄未使用索引的語句
log_queries_not_using_indexes=1

# 記錄管理型慢SQL
log_slow_admin_statements=1

# 記錄 slave 產生的慢查詢
log_slow_slave_statements=1

# 每分鐘記錄到日誌的未使用索引的語句數目, 超過這個值後只記錄語句數量和花費的總時間
log_throttle_queries_not_using_indexes=10

# 日誌過期時間天數
expire_logs_days=90

# binlog日誌文件大小
max_binlog_size=100M

# 記錄慢查詢超時時間, 默認為秒
long_query_time=3

# 查詢返回少於該參數指定行的SQL不被記錄到慢查詢日誌
min_examined_row_limit=100

######## master replication settings ########

# binlog 日誌文件
#log_bin=/opt/data/mysql/log/mysql-bin.log

# binlog 索引文件
#log_bin_index=/opt/data/mysql/log/mysql-bin.index

# sync_binlog=0, 當事務提交之後, MySQL不做fsync之類的磁盤同步指令刷新binlog_cache中的信息到磁盤, 而讓Filesystem自行決定什麽時候來做同步, 或者cache滿了之後才同步到磁盤
# sync_binlog=n, 當每進行n次事務提交之後, MySQL將進行一次fsync之類的磁盤同步指令來將binlog_cache中的數據強制寫入磁盤
# MySQL中系統默認的設置是sync_binlog=0, 也就是不做任何強制性的磁盤刷新指令, 這時候的性能是最好的, 但是風險也是最大的. 因為一旦系統Crash, 在binlog_cache中的所有binlog信息都會被丟失. 而
# 當設置為"1"的時候, 是最安全但是性能損耗最大的設置. 因為當設置為1的時候, 即使系統Crash, 也最多丟失binlog_cache中未完成的一個事務, 對實際數據沒有任何實質性影響.
# 從以往經驗和相關測試來看, 對於高並發事務的系統來說, "sync_binlog"設置為0和設置為1的系統寫入性能差距可能高達5倍甚至更多
#sync_binlog=3

# 啟用 GTID 類型
#gtid_mode=on

# 強制 GTID 一致性
#enforce_gtid_consistency=1

# 主從一致性校驗算法
#binlog_checksum=CRC32

# slave更新是否記入日誌, 在做雙主架構時異常重要, 影響到雙主架構是否能互相同步
#log_slave_updates=1

# binlog日誌格式
#binlog_format=row

# 這個參數控制了當mysql啟動或重啟時, mysql在搜尋GTIDs時是如何叠代使用binlog文件的.  這個選項設置為真, 會提升mysql執行恢復的性能. 因為這樣mysql-server啟動和binlog日誌清理更快
#binlog_gtid_simple_recovery=1

# 跳過指定error no類型的錯誤, 設成all 跳過所有錯誤
#slave_skip_errors=ddl_exist_errors

######## slave replication settings ########

# binlog 日誌文件
log_bin=/opt/data/mysql/log/mysql-bin.log

# binlog 索引文件
log_bin_index=/opt/data/mysql/log/mysql-bin.index

# sync_binlog=0, 當事務提交之後, MySQL不做fsync之類的磁盤同步指令刷新binlog_cache中的信息到磁盤, 而讓Filesystem自行決定什麽時候來做同步, 或者cache滿了之後才同步到磁盤
# sync_binlog=n, 當每進行n次事務提交之後, MySQL將進行一次fsync之類的磁盤同步指令來將binlog_cache中的數據強制寫入磁盤
# MySQL中系統默認的設置是sync_binlog=0, 也就是不做任何強制性的磁盤刷新指令, 這時候的性能是最好的, 但是風險也是最大的. 因為一旦系統Crash, 在binlog_cache中的所有binlog信息都會被丟失. 而
# 當設置為"1"的時候, 是最安全但是性能損耗最大的設置. 因為當設置為1的時候, 即使系統Crash, 也最多丟失binlog_cache中未完成的一個事務, 對實際數據沒有任何實質性影響.
# 從以往經驗和相關測試來看, 對於高並發事務的系統來說, "sync_binlog"設置為0和設置為1的系統寫入性能差距可能高達5倍甚至更多
sync_binlog=3

# 啟用 GTID 類型
gtid_mode=on

# 強制 GTID 一致性
enforce_gtid_consistency=1

# binlog日誌格式
binlog_format=row

# 設置 slave 為只讀 (僅限制普通用戶,不限制超級用戶)
read_only=1

# slave 保存同步中繼日誌的位置
relay_log=/opt/data/mysql/log/relay.log

# slave 同步中繼日誌索引文件
relay_log_index=/opt/data/mysql/log/relay-log-index

# slave 節點保存 master 節點信息方式 , 設定為 file 會生成master.info 和 relay-log.info 2個文件 ; 設定為 table 時信息就會存在 mysql.master_slave_info 表中
master_info_repository=TABLE

# 用於保存 slave 讀取 relay log 的位置信息
relay_log_info_repository=TABLE

# 當slave從庫宕機後, 假如relay-log損壞了, 導致一部分中繼日誌沒有處理, 則自動放棄所有未執行的relay-log, 並且重新從master上獲取日誌, 這樣就保證了relay-log的完整性
relay_log_recovery=1

# 這個參數控制了當mysql啟動或重啟時, mysql在搜尋GTIDs時是如何叠代使用binlog文件的.  這個選項設置為真, 會提升mysql執行恢復的性能. 因為這樣mysql-server啟動和binlog日誌清理更快
binlog_gtid_simple_recovery=1

# 跳過指定error no類型的錯誤, 設成all 跳過所有錯誤
slave_skip_errors=ddl_exist_errors

# 在從庫執行start slave的時候, 會將report-host和report-port(默認3306)發給主庫, 主庫記錄在全局哈希結構變量 slave_list 中
# 如果想要連report-user和report-password也顯示出來, 則需要主庫配置參參數show-slave-auth-info
#report_port=3306
#report_host=172.16.0.167

######## innodb settings ########

# innodb每個數據頁大小
innodb_page_size=16K

# 緩存innodb表的索引、數據, 插入數據時的緩沖, 專用mysql服務器設置的大小:  操作系統內存的70%-80%最佳
innodb_buffer_pool_size=6G

# 可以開啟多個內存緩沖池, 把需要緩沖的數據hash到不同的緩沖池中, 這樣可以並行的內存讀寫
innodb_buffer_pool_instances=8

# 加載本地熱數據到InnoDB緩存
innodb_buffer_pool_load_at_startup=1

# 停止MySQL服務時, InnoDB將InnoDB緩沖池中的熱數據保存到本地硬盤
innodb_buffer_pool_dump_at_shutdown=1

# page cleaner線程每次刷臟頁的數量
innodb_lru_scan_depth=2000

# 事務等待獲取資源等待的最長時間, 單位是秒
innodb_lock_wait_timeout=5

# 這兩個設置會影響InnoDB每秒在後臺執行多少操作. 大多數寫IO(除了寫InnoDB日誌)是後臺操作的.
# 如果深度了解硬件性能(如每秒可以執行多少次IO操作),則使用這些功能是很可取的,而不是讓它閑著
#innodb_io_capacity=4000
#innodb_io_capacity_max=8000

# 默認值為 fdatasync.
# 如果使用 硬件RAID磁盤控制器, 可能需要設置為 O_DIRECT. 這在讀取InnoDB緩沖池時可防止雙緩沖(double buffering)效應, 否則會在文件系統緩存與InnoDB緩存間形成2個副本(copy).
# 如果不使用硬件RAID控制器,或者使用SAN存儲時, O_DIRECT 可能會導致性能下降
#innodb_flush_method=O_DIRECT

#innodb_file_format=Barracuda
#innodb_file_format_max=Barracuda
#innodb_strict_mode=1
#innodb_file_per_table=1

# innodb重做日誌保存目錄
innodb_log_group_home_dir=/opt/data/mysql/redolog/

# innodb回滾日誌保存目錄
innodb_undo_directory=/opt/data/mysql/undolog/

# undo回滾段的數量,  至少大於等於35, 默認128
innodb_undo_logs=128

# 用於設定創建的undo表空間的個數, 在mysql_install_db時初始化後, 就再也不能被改動了;
# 默認值為0, 表示不獨立設置undo的tablespace, 默認記錄到ibdata中; 否則, 則在undo目錄下創建這麽多個undo文件,
# 例如假定設置該值為4, 那麽就會創建命名為undo001~undo004的undo tablespace文件, 每個文件的默認大小為10M
# 修改該值會導致Innodb無法完成初始化, 數據庫無法啟動
#innodb_undo_tablespaces=0

# InnoDB存儲引擎在刷新一個臟頁時, 會檢測該頁所在區(extent)的所有頁, 如果是臟頁, 那麽一起刷新.
# 這樣做的好處是通過AIO可以將多個IO寫操作合並為一個IO操作. 對於傳統機械硬盤建議使用, 而對於固態硬盤可以關閉
#innodb_flush_neighbors=1

# 日誌文件的大小
innodb_log_file_size=4G

# 事務在內存中的緩沖
innodb_log_buffer_size=16M

# 控制是否使用, 使用幾個獨立purge線程(清除二進制日誌)
innodb_purge_threads=4

# mysql在5.6之前一直都是單列索引限制767, 起因是256×3-1. 這個3是字符最大占用空間(utf8).
# 在5.6以後, 開始支持4個字節的uutf8. 255×4>767, 於是增加了這個參數. 這個參數默認值是OFF. 當改為ON時, 允許列索引最大達到3072
innodb_large_prefix=1

# InnoDB kernel並發最大的線程數.
# 1) 最少設置為(num_disks+num_cpus)*2
# 2) 可以通過設置成1000來禁止這個限制
innodb_thread_concurrency=64

# 將死鎖相關信息保存到MySQL 錯誤日誌中
innodb_print_all_deadlocks=1

# RDER BY 或者 GROUP BY 操作的buffer緩存大小
innodb_sort_buffer_size=64M

########semi sync replication settings########

# 指定mysql插件目錄
#plugin_dir=/opt/data/mysql/lib/plugin

# 指定載入哪些插件
#plugin_load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"

# 控制主庫上是否開啟semisync
#loose_rpl_semi_sync_master_enabled=1

# 控制備庫是否開啟semisync
#loose_rpl_semi_sync_slave_enabled=1

# 單位毫秒, 防止半同步復制在沒有收到確認的情況下, 發送堵塞. master在超時之前沒有收到確認, 將恢復到異步復制, 繼續執行半同步沒有進行的操作
#loose_rpl_semi_sync_master_timeout=5000
[mysqld-5.7]

# 轉儲每個bp instance LRU上最熱的page的百分比. 通過設置該參數可以減少轉儲的page數
#innodb_buffer_pool_dump_pct=40

# Page cleaner並未和buffer pool綁定, 其模型為一個協調線程 + 多個工作線程, 協調線程本身也是工作線程.
# 如果innodb_page_cleaners設置為8, 那麽就是一個協調線程, 加7個工作線程
#innodb_page_cleaners=4

# 開啟在線回收(收縮)undo log日誌文件
#innodb_undo_log_truncate=1

# 當超過這個閥值(默認是1G), 會觸發truncate回收(收縮)動作, truncate後空間縮小到10M
#innodb_max_undo_log_size=2G

# 控制回收(收縮)undo log的頻率
#innodb_purge_rseg_truncate_frequency=128

# mysql在搜尋GTID時是如何叠代使用binlog文件的. 這個選項設置為真, 會提升mysql執行恢復的性能. 因為這樣mysql-server啟動和binlog日誌清理更快
#binlog_gtid_simple_recovery=1

# 該參數控制 error log、genera log等等記錄日誌的顯示時間參數
log_timestamps=system

# 這個神奇的參數5.7.6版本引入, 用於定義一個記錄事務的算法, 這個算法使用hash標識來記錄事務.
# 如果使用MGR, 那麽這個hash值需要用於分布式沖突檢測何處理.
# 在64位的系統, 官網建議設置該參數使用 XXHASH64 算法. 如果線上並沒有使用該功能, 應該設為off
#transaction_writeet_extraction=MURMUR32

#show_compatibility_56=on


[client]

default_character-set=utf8

[mysql]

default_character-set=utf8

重啟 mysql 服務

[root@DTDREAM-TRAINING-HUB-01 etc]# systemctl restart mysqld

查看 binlog 日誌狀態

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

查看 GTID 狀態

mysql> show variables like "%gtid%";
+----------------------------------+-----------+
| Variable_name                    | Value     |
+----------------------------------+-----------+
| binlog_gtid_simple_recovery      | ON        |
| enforce_gtid_consistency         | ON        |
| gtid_executed_compression_period | 1000      |
| gtid_mode                        | ON        |
| gtid_next                        | AUTOMATIC |
| gtid_owned                       |           |
| gtid_purged                      |           |
| session_track_gtids              | OFF       |
+----------------------------------+-----------+

查看服務器server_uuid

mysql> show global variables like '%uuid%';
+---------------+--------------------------------------+
| Variable_name | Value                                |
+---------------+--------------------------------------+
| server_uuid   | 01378bf6-2b35-11e8-98fe-00163e04ca22 |
+---------------+--------------------------------------+
1 row in set (0.00 sec)

查看服務器 server_id

mysql> show variables like '%server_id%';
+----------------+-------+
| Variable_name  | Value |
+----------------+-------+
| server_id      | 10    |
| server_id_bits | 32    |
+----------------+-------+
2 rows in set (0.01 sec)

在 slave 上配置 mysql 主從 基於日誌復制

安裝參考以上步驟,此處不再詳解

創建日誌目錄

[root@DTDREAM-TRAINING-HUB-01 etc]# mkdir -p /opt/data/mysql/log
[root@DTDREAM-TRAINING-HUB-01 log]# mkdir -p /opt/data/mysql/redolog/
[root@DTDREAM-TRAINING-HUB-01 log]# mkdir -p /opt/data/mysql/undolog/

日誌目錄權限修改

[root@DTDREAM-TRAINING-HUB-01 mysql]# chown -R mysql:mysql /opt/data/mysql/log
[root@DTDREAM-TRAINING-HUB-01 mysql]# chown -R mysql:mysql /opt/data/mysql/redolog
[root@DTDREAM-TRAINING-HUB-01 mysql]# chown -R mysql:mysql /opt/data/mysql/undolog

修改 salve 配置文件

刪除原有內容並復制以下內容到配置文件中

[mysqld]

######## basic settings ########

# 服務器 ID , 主從唯一標識
server_id=10

# 監聽端口
#port=3306

# 運行用戶
user=mysql

# 監聽IP地址, 如果是127.0.0.1, 表示僅本機訪問
#bind_address=127.0.0.1

# 數據修改是否自動提交, 為0不自動提交
autocommit=1

# 服務器字符集 , utf8mb4為超字符集, 兼容UTF-8並可存儲4字節的圖片
character_set_server=utf8mb4

# 禁用DNS主機名查找, 啟用以後用內網地址向mysqlslap請求響應快一半
skip_name_resolve=1

# 最大連接數
max_connections=1024

# 主機連接錯誤次數等於max_connect_errors(默認10)時 , 再次嘗試連接將被屏蔽. 可有效防止DDOS攻擊
max_connect_errors=1000

# 數據存儲目錄
datadir=/opt/data/mysql

# socket方式運行文件存儲路徑
socket=/opt/data/mysql/mysql.sock

# 進程PID文件
pid_file=/opt/data/mysql/mysqld.pid

# 數據庫事務隔離級別
# 1. READ-UNCOMMITTED(讀取未提交內容)級別
# 2. READ-COMMITTED(讀取提交內容)
# 3. REPEATABLE-READ(可重讀)
# 4. SERIERLIZED(可串行化)
# 默認級別REPEATABLE-READ
transaction_isolation=READ-COMMITTED

explicit_defaults_for_timestamp=1

# join是ALL,index,rang或者Index_merge的時候使用的buffer
join_buffer_size=128M

# 內部內存臨時表的最大值
tmp_table_size=128M

# 臨時文件目錄
tmpdir=/tmp

# 最大接受的數據包大小
max_allowed_packet=16M

# sql_mode 模式, 定義了你MySQL應該支持的sql語法, 對數據的校驗等等, 限制一些所謂的不合法操作
sql_mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER"

# 服務器關閉交互式連接前等待活動的秒數
interactive_timeout=60

# 服務器關閉非交互連接之前等待活動的秒數
wait_timeout=60

# 讀入緩沖區的大小
read_buffer_size=16M

# 隨機讀緩沖區大小
read_rnd_buffer_size=32M

# connection緩存
sort_buffer_size=32M

######## log settings ########

# 錯誤日誌文件
log_error=/opt/data/mysql/mysqld.log

# 是否開啟慢查詢日誌收集, 1為啟用, 0為禁用
slow_query_log=1

# 慢查詢日誌文件
slow_query_log_file=/opt/data/mysql/log/slow.log

# 記錄未使用索引的語句
log_queries_not_using_indexes=1

# 記錄管理型慢SQL
log_slow_admin_statements=1

# 記錄 slave 產生的慢查詢
log_slow_slave_statements=1

# 每分鐘記錄到日誌的未使用索引的語句數目, 超過這個值後只記錄語句數量和花費的總時間
log_throttle_queries_not_using_indexes=10

# 日誌過期時間天數
expire_logs_days=90

# binlog日誌文件大小
max_binlog_size=100M

# 記錄慢查詢超時時間, 默認為秒
long_query_time=3

# 查詢返回少於該參數指定行的SQL不被記錄到慢查詢日誌
min_examined_row_limit=100

######## master replication settings ########

# binlog 日誌文件
#log_bin=/opt/data/mysql/log/mysql-bin.log

# binlog 索引文件
#log_bin_index=/opt/data/mysql/log/mysql-bin.index

# sync_binlog=0, 當事務提交之後, MySQL不做fsync之類的磁盤同步指令刷新binlog_cache中的信息到磁盤, 而讓Filesystem自行決定什麽時候來做同步, 或者cache滿了之後才同步到磁盤
# sync_binlog=n, 當每進行n次事務提交之後, MySQL將進行一次fsync之類的磁盤同步指令來將binlog_cache中的數據強制寫入磁盤
# MySQL中系統默認的設置是sync_binlog=0, 也就是不做任何強制性的磁盤刷新指令, 這時候的性能是最好的, 但是風險也是最大的. 因為一旦系統Crash, 在binlog_cache中的所有binlog信息都會被丟失. 而
# 當設置為"1"的時候, 是最安全但是性能損耗最大的設置. 因為當設置為1的時候, 即使系統Crash, 也最多丟失binlog_cache中未完成的一個事務, 對實際數據沒有任何實質性影響.
# 從以往經驗和相關測試來看, 對於高並發事務的系統來說, "sync_binlog"設置為0和設置為1的系統寫入性能差距可能高達5倍甚至更多
#sync_binlog=3

# 啟用 GTID 類型
#gtid_mode=on

# 強制 GTID 一致性
#enforce_gtid_consistency=1

# 主從一致性校驗算法
#binlog_checksum=CRC32

# slave更新是否記入日誌, 在做雙主架構時異常重要, 影響到雙主架構是否能互相同步
#log_slave_updates=1

# binlog日誌格式
#binlog_format=row

# 這個參數控制了當mysql啟動或重啟時, mysql在搜尋GTIDs時是如何叠代使用binlog文件的.  這個選項設置為真, 會提升mysql執行恢復的性能. 因為這樣mysql-server啟動和binlog日誌清理更快
#binlog_gtid_simple_recovery=1

# 跳過指定error no類型的錯誤, 設成all 跳過所有錯誤
#slave_skip_errors=ddl_exist_errors

######## slave replication settings ########

# binlog 日誌文件
log_bin=/opt/data/mysql/log/mysql-bin.log

# binlog 索引文件
log_bin_index=/opt/data/mysql/log/mysql-bin.index

# sync_binlog=0, 當事務提交之後, MySQL不做fsync之類的磁盤同步指令刷新binlog_cache中的信息到磁盤, 而讓Filesystem自行決定什麽時候來做同步, 或者cache滿了之後才同步到磁盤
# sync_binlog=n, 當每進行n次事務提交之後, MySQL將進行一次fsync之類的磁盤同步指令來將binlog_cache中的數據強制寫入磁盤
# MySQL中系統默認的設置是sync_binlog=0, 也就是不做任何強制性的磁盤刷新指令, 這時候的性能是最好的, 但是風險也是最大的. 因為一旦系統Crash, 在binlog_cache中的所有binlog信息都會被丟失. 而
# 當設置為"1"的時候, 是最安全但是性能損耗最大的設置. 因為當設置為1的時候, 即使系統Crash, 也最多丟失binlog_cache中未完成的一個事務, 對實際數據沒有任何實質性影響.
# 從以往經驗和相關測試來看, 對於高並發事務的系統來說, "sync_binlog"設置為0和設置為1的系統寫入性能差距可能高達5倍甚至更多
sync_binlog=3

# 啟用 GTID 類型
gtid_mode=on

# 強制 GTID 一致性
enforce_gtid_consistency=1

# binlog日誌格式
binlog_format=row

# 設置 slave 為只讀 (僅限制普通用戶,不限制超級用戶)
read_only=1

# slave 保存同步中繼日誌的位置
relay_log=/opt/data/mysql/log/relay.log

# slave 同步中繼日誌索引文件
relay_log_index=/opt/data/mysql/log/relay-log-index

# slave 節點保存 master 節點信息方式 , 設定為 file 會生成master.info 和 relay-log.info 2個文件 ; 設定為 table 時信息就會存在 mysql.master_slave_info 表中
master_info_repository=TABLE

# 用於保存 slave 讀取 relay log 的位置信息
relay_log_info_repository=TABLE

# 當slave從庫宕機後, 假如relay-log損壞了, 導致一部分中繼日誌沒有處理, 則自動放棄所有未執行的relay-log, 並且重新從master上獲取日誌, 這樣就保證了relay-log的完整性
relay_log_recovery=1

# 這個參數控制了當mysql啟動或重啟時, mysql在搜尋GTIDs時是如何叠代使用binlog文件的.  這個選項設置為真, 會提升mysql執行恢復的性能. 因為這樣mysql-server啟動和binlog日誌清理更快
binlog_gtid_simple_recovery=1

# 跳過指定error no類型的錯誤, 設成all 跳過所有錯誤
slave_skip_errors=ddl_exist_errors

# 在從庫執行start slave的時候, 會將report-host和report-port(默認3306)發給主庫, 主庫記錄在全局哈希結構變量 slave_list 中
# 如果想要連report-user和report-password也顯示出來, 則需要主庫配置參參數show-slave-auth-info
report_port=3306
report_host=172.16.0.167

######## innodb settings ########

# innodb每個數據頁大小
innodb_page_size=16K

# 緩存innodb表的索引、數據, 插入數據時的緩沖, 專用mysql服務器設置的大小:  操作系統內存的70%-80%最佳
innodb_buffer_pool_size=6G

# 可以開啟多個內存緩沖池, 把需要緩沖的數據hash到不同的緩沖池中, 這樣可以並行的內存讀寫
innodb_buffer_pool_instances=8

# 加載本地熱數據到InnoDB緩存
innodb_buffer_pool_load_at_startup=1

# 停止MySQL服務時, InnoDB將InnoDB緩沖池中的熱數據保存到本地硬盤
innodb_buffer_pool_dump_at_shutdown=1

# page cleaner線程每次刷臟頁的數量
innodb_lru_scan_depth=2000

# 事務等待獲取資源等待的最長時間, 單位是秒
innodb_lock_wait_timeout=5

# 這兩個設置會影響InnoDB每秒在後臺執行多少操作. 大多數寫IO(除了寫InnoDB日誌)是後臺操作的.
# 如果深度了解硬件性能(如每秒可以執行多少次IO操作),則使用這些功能是很可取的,而不是讓它閑著
#innodb_io_capacity=4000
#innodb_io_capacity_max=8000

# 默認值為 fdatasync.
# 如果使用 硬件RAID磁盤控制器, 可能需要設置為 O_DIRECT. 這在讀取InnoDB緩沖池時可防止雙緩沖(double buffering)效應, 否則會在文件系統緩存與InnoDB緩存間形成2個副本(copy).
# 如果不使用硬件RAID控制器,或者使用SAN存儲時, O_DIRECT 可能會導致性能下降
#innodb_flush_method=O_DIRECT

#innodb_file_format=Barracuda
#innodb_file_format_max=Barracuda
#innodb_strict_mode=1
#innodb_file_per_table=1

# innodb重做日誌保存目錄
innodb_log_group_home_dir=/opt/data/mysql/redolog/

# innodb回滾日誌保存目錄
innodb_undo_directory=/opt/data/mysql/undolog/

# undo回滾段的數量,  至少大於等於35, 默認128
innodb_undo_logs=128

# 用於設定創建的undo表空間的個數, 在mysql_install_db時初始化後, 就再也不能被改動了;
# 默認值為0, 表示不獨立設置undo的tablespace, 默認記錄到ibdata中; 否則, 則在undo目錄下創建這麽多個undo文件,
# 例如假定設置該值為4, 那麽就會創建命名為undo001~undo004的undo tablespace文件, 每個文件的默認大小為10M
# 修改該值會導致Innodb無法完成初始化, 數據庫無法啟動
#innodb_undo_tablespaces=0

# InnoDB存儲引擎在刷新一個臟頁時, 會檢測該頁所在區(extent)的所有頁, 如果是臟頁, 那麽一起刷新.
# 這樣做的好處是通過AIO可以將多個IO寫操作合並為一個IO操作. 對於傳統機械硬盤建議使用, 而對於固態硬盤可以關閉
#innodb_flush_neighbors=1

# 日誌文件的大小
innodb_log_file_size=4G

# 事務在內存中的緩沖
innodb_log_buffer_size=16M

# 控制是否使用, 使用幾個獨立purge線程(清除二進制日誌)
innodb_purge_threads=4

# mysql在5.6之前一直都是單列索引限制767, 起因是256×3-1. 這個3是字符最大占用空間(utf8).
# 在5.6以後, 開始支持4個字節的uutf8. 255×4>767, 於是增加了這個參數. 這個參數默認值是OFF. 當改為ON時, 允許列索引最大達到3072
innodb_large_prefix=1

# InnoDB kernel並發最大的線程數.
# 1) 最少設置為(num_disks+num_cpus)*2
# 2) 可以通過設置成1000來禁止這個限制
innodb_thread_concurrency=64

# 將死鎖相關信息保存到MySQL 錯誤日誌中
innodb_print_all_deadlocks=1

# RDER BY 或者 GROUP BY 操作的buffer緩存大小
innodb_sort_buffer_size=64M

########semi sync replication settings########

# 指定mysql插件目錄
#plugin_dir=/opt/data/mysql/lib/plugin

# 指定載入哪些插件
#plugin_load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"

# 控制主庫上是否開啟semisync
#loose_rpl_semi_sync_master_enabled=1

# 控制備庫是否開啟semisync
#loose_rpl_semi_sync_slave_enabled=1

# 單位毫秒, 防止半同步復制在沒有收到確認的情況下, 發送堵塞. master在超時之前沒有收到確認, 將恢復到異步復制, 繼續執行半同步沒有進行的操作
#loose_rpl_semi_sync_master_timeout=5000
[mysqld-5.7]

# 轉儲每個bp instance LRU上最熱的page的百分比. 通過設置該參數可以減少轉儲的page數
#innodb_buffer_pool_dump_pct=40

# Page cleaner並未和buffer pool綁定, 其模型為一個協調線程 + 多個工作線程, 協調線程本身也是工作線程.
# 如果innodb_page_cleaners設置為8, 那麽就是一個協調線程, 加7個工作線程
#innodb_page_cleaners=4

# 開啟在線回收(收縮)undo log日誌文件
#innodb_undo_log_truncate=1

# 當超過這個閥值(默認是1G), 會觸發truncate回收(收縮)動作, truncate後空間縮小到10M
#innodb_max_undo_log_size=2G

# 控制回收(收縮)undo log的頻率
#innodb_purge_rseg_truncate_frequency=128

# mysql在搜尋GTID時是如何叠代使用binlog文件的. 這個選項設置為真, 會提升mysql執行恢復的性能. 因為這樣mysql-server啟動和binlog日誌清理更快
#binlog_gtid_simple_recovery=1

# 該參數控制 error log、genera log等等記錄日誌的顯示時間參數
log_timestamps=system

# 這個神奇的參數5.7.6版本引入, 用於定義一個記錄事務的算法, 這個算法使用hash標識來記錄事務.
# 如果使用MGR, 那麽這個hash值需要用於分布式沖突檢測何處理.
# 在64位的系統, 官網建議設置該參數使用 XXHASH64 算法. 如果線上並沒有使用該功能, 應該設為off
#transaction_write_set_extraction=MURMUR32

#show_compatibility_56=on


[client]

default_character-set=utf8

[mysql]

default_character-set=utf8

重啟 mysql 服務

[root@DTDREAM-TRAINING-HUB-01 etc]# systemctl restart mysqld

查看 binlog 日誌狀態

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

查看 GTID 狀態

mysql> show variables like "%gtid%";
+----------------------------------+-----------+
| Variable_name                    | Value     |
+----------------------------------+-----------+
| binlog_gtid_simple_recovery      | ON        |
| enforce_gtid_consistency         | ON        |
| gtid_executed_compression_period | 1000      |
| gtid_mode                        | ON        |
| gtid_next                        | AUTOMATIC |
| gtid_owned                       |           |
| gtid_purged                      |           |
| session_track_gtids              | OFF       |
+----------------------------------+-----------+

查看服務器server_uuid

mysql> show global variables like '%uuid%';
+---------------+--------------------------------------+
| Variable_name | Value                                |
+---------------+--------------------------------------+
| server_uuid   | 01378bf6-2b35-11e8-98fe-00163e04ca22 |
+---------------+--------------------------------------+
1 row in set (0.00 sec)

查看服務器 server_id

mysql> show variables like '%server_id%';
+----------------+-------+
| Variable_name  | Value |
+----------------+-------+
| server_id      | 10    |
| server_id_bits | 32    |
+----------------+-------+
2 rows in set (0.01 sec)

配置 slave 連接到 master

mysql> CHANGE MASTER TO MASTER_HOST='172.16.0.166',MASTER_USER='dt_sync',MASTER_PASSWORD='dtdreamsync',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=0;
Query OK, 0 rows affected, 2 warnings (0.04 sec)

啟動slave

mysql> START SLAVE;
Query OK, 0 rows affected (0.01 sec)

查看 slave 狀態

確認 Slave_IO_Running 和 Slave_SQL_Running 兩個參數都為 Yes 狀態

mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.16.0.166
                  Master_User: dt_sync
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 154
               Relay_Log_File: relay.000002
                Relay_Log_Pos: 367
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 154
              Relay_Log_Space: 564
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 10
                  Master_UUID: 01378bf6-2b35-11e8-98fe-00163e04ca22
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set:
                Auto_Position: 0
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:
1 row in set (0.00 sec)

主從測試

創建測試數據庫 RUNOOB 在 master

mysql> CREATE DATABASE IF NOT EXISTS RUNOOB DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| RUNOOB             |
| log                |
| mysql              |
| performance_schema |
| redolog            |
| sys                |
| undolog            |
+--------------------+
8 rows in set (0.00 sec)

切換到 RUNOOB

mysql> use RUNOOB
Database changed

在 RUNOOB 庫中創建測試表 runoob_tbl

mysql> CREATE TABLE IF NOT EXISTS `runoob_tbl`(
    ->    `runoob_id` INT UNSIGNED AUTO_INCREMENT,
    ->    `runoob_title` VARCHAR(100) NOT NULL,
    ->    `runoob_author` VARCHAR(40) NOT NULL,
    ->    `submission_date` DATE,
    ->    PRIMARY KEY ( `runoob_id` )
    -> )ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.01 sec)

mysql> show tables
    -> ;
+------------------+
| Tables_in_RUNOOB |
+------------------+
| runoob_tbl       |
+------------------+
1 row in set (0.00 sec)

在 runoob_tbl 表中插入一條數據

mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO runoob_tbl (runoob_title, runoob_author, submission_date) VALUES ("python", "人生苦短吾愛python", NOW());
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> COMMIT;
Query OK, 0 rows affected (0.00 sec)


mysql>
mysql> select * from runoob_tbl;
+-----------+--------------+---------------+-----------------+
| runoob_id | runoob_title | runoob_author | submission_date |
+-----------+--------------+---------------+-----------------+
|         1 | python     | 人生苦短吾愛python      | 2018-03-19      |
+-----------+--------------+---------------+-----------------+
1 row in set (0.00 sec)

查看 binlog 日誌狀態

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                        |
+------------------+----------+--------------+------------------+------------------------------------------+
| mysql-bin.000001 |     2187 |              |                  | 01378bf6-2b35-11e8-98fe-00163e04ca22:1-7 |
+------------------+----------+--------------+------------------+------------------------------------------+
1 row in set (0.00 sec)

查看 slave 是否已經復制數據

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| RUNOOB             |
| log                |
| mysql              |
| performance_schema |
| redolog            |
| sys                |
| undolog            |
+--------------------+
8 rows in set (0.00 sec)

mysql>
mysql> use RUNOOB;
Database changed
mysql>
mysql> show tables;
+------------------+
| Tables_in_RUNOOB |
+------------------+
| runoob_tbl       |
+------------------+
1 row in set (0.00 sec)

mysql>
mysql> select * from runoob_tbl;
+-----------+--------------+---------------+-----------------+
| runoob_id | runoob_title | runoob_author | submission_date |
+-----------+--------------+---------------+-----------------+
|         2 | python     | 人生苦短吾愛python      | 2018-03-19      |
+-----------+--------------+---------------+-----------------+
1 row in set (0.00 sec)

mysql>
mysql> SHOW SLAVE STATUS \G
mysql> SHOW SLAVE STATUS \G
*************************** 1. row ***************************
......
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set: 01378bf6-2b35-11e8-98fe-00163e04ca22:1-7
            Executed_Gtid_Set: 01378bf6-2b35-11e8-98fe-00163e04ca22:1-7
                Auto_Position: 0
......
1 row in set (0.00 sec)

mysql 5.7主從安裝和配置