本文主要介紹mysql 5.7主從復(fù)制,轉(zhuǎn)載請注明出處
下載地址
mysql5.7:https://dev.mysql.com/downloads/mysql/
libaio(可選):http://ftp.altlinux.org/pub/distributions/ALTLinux/Sisyphus/x86_64/RPMS.classic//libaio-0.3.110-alt1.1.x86_64.rpm
net-tools(可選):http://mirror.centos.org/centos/7/os/x86_64/Packages/net-tools-2.0-0.22.20131004git.el7.x86_64.rpm
卸載系統(tǒng)自帶的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 依賴模塊(可選,一般系統(tǒng)都安裝了)
[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原有內(nèi)容并復(fù)制以下配置
[mysqld]
######## basic settings ########
# 服務(wù)器 ID , 主從唯一標識
server_id=10
# 監(jiān)聽端口
#port=3306
# 運行用戶
user=mysql
# 監(jiān)聽IP地址, 如果是127.0.0.1, 表示僅本機訪問
#bind_address=127.0.0.1
# 數(shù)據(jù)修改是否自動提交, 為0不自動提交
autocommit=1
# 服務(wù)器字符集 , utf8mb4為超字符集, 兼容UTF-8并可存儲4字節(jié)的圖片
character_set_server=utf8mb4
# 禁用DNS主機名查找, 啟用以后用內(nèi)網(wǎng)地址向mysqlslap請求響應(yīng)快一半
#skip_name_resolve=1
# 最大連接數(shù)
max_connections=2048
# 主機連接錯誤次數(shù)等于max_connect_errors(默認10)時 , 再次嘗試連接將被屏蔽. 可有效防止DDOS攻擊
max_connect_errors=1000
# 數(shù)據(jù)存儲目錄
datadir=/opt/data/mysql
# socket方式運行文件存儲路徑
socket=/opt/data/mysql/mysql.sock
# 進程PID文件
pid_file=/opt/data/mysql/mysqld.pid
# 數(shù)據(jù)庫事務(wù)隔離級別
# 1. READ-UNCOMMITTED(讀取未提交內(nèi)容)級別
# 2. READ-COMMITTED(讀取提交內(nèi)容)
# 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
# 內(nèi)部內(nèi)存臨時表的最大值
tmp_table_size=128M
# 臨時文件目錄
tmpdir=/tmp
# 最大接受的數(shù)據(jù)包大小
max_allowed_packet=16M
# sql_mode 模式, 定義了你MySQL應(yīng)該支持的sql語法, 對數(shù)據(jù)的校驗等等, 限制一些所謂的不合法操作
sql_mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER"
# 服務(wù)器關(guān)閉交互式連接前等待活動的秒數(shù)
interactive_timeout=60
# 服務(wù)器關(guān)閉非交互連接之前等待活動的秒數(shù)
wait_timeout=60
# 讀入緩沖區(qū)的大小
read_buffer_size=16M
# 隨機讀緩沖區(qū)大小
read_rnd_buffer_size=32M
# connection緩存
sort_buffer_size=32M
######## log settings ########
# 錯誤日志文件
log_error=/opt/data/mysql/mysqld.log
# 是否開啟慢查詢?nèi)罩臼占? 1為啟用, 0為禁用
#slow_query_log=1
# 慢查詢?nèi)罩疚募?#slow_query_log_file=/opt/data/mysql/log/slow.log
# 記錄未使用索引的語句
log_queries_not_using_indexes=1
# 記錄管理型慢SQL
log_slow_admin_statements=1
# 記錄 slave 產(chǎn)生的慢查詢
log_slow_slave_statements=1
# 每分鐘記錄到日志的未使用索引的語句數(shù)目, 超過這個值后只記錄語句數(shù)量和花費的總時間
log_throttle_queries_not_using_indexes=10
# 日志過期時間天數(shù)
expire_logs_days=90
# binlog日志文件大小
max_binlog_size=100M
# 記錄慢查詢超時時間, 默認為秒
long_query_time=3
# 查詢返回少于該參數(shù)指定行的SQL不被記錄到慢查詢?nèi)罩?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 服務(wù)狀態(tài)
[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.
設(shè)置 mysql 服務(wù)自啟動
[root@DTDREAM-TRAINING-HUB-01 mysql]# systemctl enable mysqld
檢查 mysql 服務(wù)自啟動狀態(tài)
[root@DTDREAM-TRAINING-HUB-01 mysql]# systemctl list-unit-files --type=service | grep -i mysqld
mysqld.service enabled
mysqld@.service 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 數(shù)據(jù)庫
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 主從 基于日志復(fù)制
在 master 創(chuàng)建主從同步賬號建立一個帳戶 "dt_sync" , 且只能允許從 從服務(wù)器(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)
刷新權(quán)限
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
創(chuàng)建日志目錄
[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/
日志目錄權(quán)限修改
[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原有內(nèi)容并復(fù)制以下優(yōu)化內(nèi)容到配置文件中
[mysqld]
######## basic settings ########
# 服務(wù)器 ID , 主從唯一標識
server_id=10
# 監(jiān)聽端口
#port=3306
# 運行用戶
user=mysql
# 監(jiān)聽IP地址, 如果是127.0.0.1, 表示僅本機訪問
#bind_address=127.0.0.1
# 數(shù)據(jù)修改是否自動提交, 為0不自動提交
autocommit=1
# 服務(wù)器字符集 , utf8mb4為超字符集, 兼容UTF-8并可存儲4字節(jié)的圖片
character_set_server=utf8mb4
# 禁用DNS主機名查找, 啟用以后用內(nèi)網(wǎng)地址向mysqlslap請求響應(yīng)快一半
skip_name_resolve=1
# 最大連接數(shù)
max_connections=2048
# 主機連接錯誤次數(shù)等于max_connect_errors(默認10)時 , 再次嘗試連接將被屏蔽. 可有效防止DDOS攻擊
max_connect_errors=1000
# 數(shù)據(jù)存儲目錄
datadir=/opt/data/mysql
# socket方式運行文件存儲路徑
socket=/opt/data/mysql/mysql.sock
# 進程PID文件
pid_file=/opt/data/mysql/mysqld.pid
# 數(shù)據(jù)庫事務(wù)隔離級別
# 1. READ-UNCOMMITTED(讀取未提交內(nèi)容)級別
# 2. READ-COMMITTED(讀取提交內(nèi)容)
# 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
# 內(nèi)部內(nèi)存臨時表的最大值
tmp_table_size=128M
# 臨時文件目錄
tmpdir=/tmp
# 最大接受的數(shù)據(jù)包大小
max_allowed_packet=16M
# sql_mode 模式, 定義了你MySQL應(yīng)該支持的sql語法, 對數(shù)據(jù)的校驗等等, 限制一些所謂的不合法操作
sql_mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER"
# 服務(wù)器關(guān)閉交互式連接前等待活動的秒數(shù)
interactive_timeout=60
# 服務(wù)器關(guān)閉非交互連接之前等待活動的秒數(shù)
wait_timeout=60
# 讀入緩沖區(qū)的大小
read_buffer_size=16M
# 隨機讀緩沖區(qū)大小
read_rnd_buffer_size=32M
# connection緩存
sort_buffer_size=32M
######## log settings ########
# 錯誤日志文件
log_error=/opt/data/mysql/mysqld.log
# 是否開啟慢查詢?nèi)罩臼占? 1為啟用, 0為禁用
slow_query_log=1
# 慢查詢?nèi)罩疚募?slow_query_log_file=/opt/data/mysql/log/slow.log
# 記錄未使用索引的語句
log_queries_not_using_indexes=1
# 記錄管理型慢SQL
log_slow_admin_statements=1
# 記錄 slave 產(chǎn)生的慢查詢
log_slow_slave_statements=1
# 每分鐘記錄到日志的未使用索引的語句數(shù)目, 超過這個值后只記錄語句數(shù)量和花費的總時間
log_throttle_queries_not_using_indexes=10
# 日志過期時間天數(shù)
expire_logs_days=90
# binlog日志文件大小
max_binlog_size=100M
# 記錄慢查詢超時時間, 默認為秒
long_query_time=3
# 查詢返回少于該參數(shù)指定行的SQL不被記錄到慢查詢?nèi)罩?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, 當(dāng)事務(wù)提交之后, MySQL不做fsync之類的磁盤同步指令刷新binlog_cache中的信息到磁盤, 而讓Filesystem自行決定什么時候來做同步, 或者cache滿了之后才同步到磁盤
# sync_binlog=n, 當(dāng)每進行n次事務(wù)提交之后, MySQL將進行一次fsync之類的磁盤同步指令來將binlog_cache中的數(shù)據(jù)強制寫入磁盤
# MySQL中系統(tǒng)默認的設(shè)置是sync_binlog=0, 也就是不做任何強制性的磁盤刷新指令, 這時候的性能是最好的, 但是風(fēng)險也是最大的. 因為一旦系統(tǒng)Crash, 在binlog_cache中的所有binlog信息都會被丟失. 而
# 當(dāng)設(shè)置為"1"的時候, 是最安全但是性能損耗最大的設(shè)置. 因為當(dāng)設(shè)置為1的時候, 即使系統(tǒng)Crash, 也最多丟失binlog_cache中未完成的一個事務(wù), 對實際數(shù)據(jù)沒有任何實質(zhì)性影響.
# 從以往經(jīng)驗和相關(guān)測試來看, 對于高并發(fā)事務(wù)的系統(tǒng)來說, "sync_binlog"設(shè)置為0和設(shè)置為1的系統(tǒng)寫入性能差距可能高達5倍甚至更多
#sync_binlog=3
# 啟用 GTID 類型
#gtid_mode=on
# 強制 GTID 一致性
#enforce_gtid_consistency=1
# 主從一致性校驗算法
#binlog_checksum=CRC32
# slave更新是否記入日志, 在做雙主架構(gòu)時異常重要, 影響到雙主架構(gòu)是否能互相同步
#log_slave_updates=1
# binlog日志格式
#binlog_format=row
# 這個參數(shù)控制了當(dāng)mysql啟動或重啟時, mysql在搜尋GTIDs時是如何迭代使用binlog文件的. 這個選項設(shè)置為真, 會提升mysql執(zhí)行恢復(fù)的性能. 因為這樣mysql-server啟動和binlog日志清理更快
#binlog_gtid_simple_recovery=1
# 跳過指定error no類型的錯誤, 設(shè)成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, 當(dāng)事務(wù)提交之后, MySQL不做fsync之類的磁盤同步指令刷新binlog_cache中的信息到磁盤, 而讓Filesystem自行決定什么時候來做同步, 或者cache滿了之后才同步到磁盤
# sync_binlog=n, 當(dāng)每進行n次事務(wù)提交之后, MySQL將進行一次fsync之類的磁盤同步指令來將binlog_cache中的數(shù)據(jù)強制寫入磁盤
# MySQL中系統(tǒng)默認的設(shè)置是sync_binlog=0, 也就是不做任何強制性的磁盤刷新指令, 這時候的性能是最好的, 但是風(fēng)險也是最大的. 因為一旦系統(tǒng)Crash, 在binlog_cache中的所有binlog信息都會被丟失. 而
# 當(dāng)設(shè)置為"1"的時候, 是最安全但是性能損耗最大的設(shè)置. 因為當(dāng)設(shè)置為1的時候, 即使系統(tǒng)Crash, 也最多丟失binlog_cache中未完成的一個事務(wù), 對實際數(shù)據(jù)沒有任何實質(zhì)性影響.
# 從以往經(jīng)驗和相關(guān)測試來看, 對于高并發(fā)事務(wù)的系統(tǒng)來說, "sync_binlog"設(shè)置為0和設(shè)置為1的系統(tǒng)寫入性能差距可能高達5倍甚至更多
sync_binlog=3
# 啟用 GTID 類型
gtid_mode=on
# 強制 GTID 一致性
enforce_gtid_consistency=1
# binlog日志格式
binlog_format=row
# 設(shè)置 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 節(jié)點保存 master 節(jié)點信息方式 , 設(shè)定為 file 會生成master.info 和 relay-log.info 2個文件 ; 設(shè)定為 table 時信息就會存在 mysql.master_slave_info 表中
master_info_repository=TABLE
# 用于保存 slave 讀取 relay log 的位置信息
relay_log_info_repository=TABLE
# 當(dāng)slave從庫宕機后, 假如relay-log損壞了, 導(dǎo)致一部分中繼日志沒有處理, 則自動放棄所有未執(zhí)行的relay-log, 并且重新從master上獲取日志, 這樣就保證了relay-log的完整性
relay_log_recovery=1
# 這個參數(shù)控制了當(dāng)mysql啟動或重啟時, mysql在搜尋GTIDs時是如何迭代使用binlog文件的. 這個選項設(shè)置為真, 會提升mysql執(zhí)行恢復(fù)的性能. 因為這樣mysql-server啟動和binlog日志清理更快
binlog_gtid_simple_recovery=1
# 跳過指定error no類型的錯誤, 設(shè)成all 跳過所有錯誤
slave_skip_errors=ddl_exist_errors
# 在從庫執(zhí)行start slave的時候, 會將report-host和report-port(默認3306)發(fā)給主庫, 主庫記錄在全局哈希結(jié)構(gòu)變量 slave_list 中
# 如果想要連report-user和report-password也顯示出來, 則需要主庫配置參參數(shù)show-slave-auth-info
#report_port=3306
#report_host=172.16.0.167
######## innodb settings ########
# innodb每個數(shù)據(jù)頁大小
innodb_page_size=16K
# 緩存innodb表的索引、數(shù)據(jù), 插入數(shù)據(jù)時的緩沖, 專用mysql服務(wù)器設(shè)置的大小: 操作系統(tǒng)內(nèi)存的70%-80%最佳
innodb_buffer_pool_size=6G
# 可以開啟多個內(nèi)存緩沖池, 把需要緩沖的數(shù)據(jù)hash到不同的緩沖池中, 這樣可以并行的內(nèi)存讀寫
innodb_buffer_pool_instances=8
# 加載本地?zé)釘?shù)據(jù)到InnoDB緩存
innodb_buffer_pool_load_at_startup=1
# 停止MySQL服務(wù)時, InnoDB將InnoDB緩沖池中的熱數(shù)據(jù)保存到本地硬盤
innodb_buffer_pool_dump_at_shutdown=1
# page cleaner線程每次刷臟頁的數(shù)量
innodb_lru_scan_depth=2000
# 事務(wù)等待獲取資源等待的最長時間, 單位是秒
innodb_lock_wait_timeout=5
# 這兩個設(shè)置會影響InnoDB每秒在后臺執(zhí)行多少操作. 大多數(shù)寫IO(除了寫InnoDB日志)是后臺操作的.
# 如果深度了解硬件性能(如每秒可以執(zhí)行多少次IO操作),則使用這些功能是很可取的,而不是讓它閑著
#innodb_io_capacity=4000
#innodb_io_capacity_max=8000
# 默認值為 fdatasync.
# 如果使用 硬件RAID磁盤控制器, 可能需要設(shè)置為 O_DIRECT. 這在讀取InnoDB緩沖池時可防止雙緩沖(double buffering)效應(yīng), 否則會在文件系統(tǒng)緩存與InnoDB緩存間形成2個副本(copy).
# 如果不使用硬件RAID控制器,或者使用SAN存儲時, O_DIRECT 可能會導(dǎo)致性能下降
#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回滾段的數(shù)量, 至少大于等于35, 默認128
innodb_undo_logs=128
# 用于設(shè)定創(chuàng)建的undo表空間的個數(shù), 在mysql_install_db時初始化后, 就再也不能被改動了;
# 默認值為0, 表示不獨立設(shè)置undo的tablespace, 默認記錄到ibdata中; 否則, 則在undo目錄下創(chuàng)建這么多個undo文件,
# 例如假定設(shè)置該值為4, 那么就會創(chuàng)建命名為undo001~undo004的undo tablespace文件, 每個文件的默認大小為10M
# 修改該值會導(dǎo)致Innodb無法完成初始化, 數(shù)據(jù)庫無法啟動
#innodb_undo_tablespaces=0
# InnoDB存儲引擎在刷新一個臟頁時, 會檢測該頁所在區(qū)(extent)的所有頁, 如果是臟頁, 那么一起刷新.
# 這樣做的好處是通過AIO可以將多個IO寫操作合并為一個IO操作. 對于傳統(tǒng)機械硬盤建議使用, 而對于固態(tài)硬盤可以關(guān)閉
#innodb_flush_neighbors=1
# 日志文件的大小
innodb_log_file_size=4G
# 事務(wù)在內(nèi)存中的緩沖
innodb_log_buffer_size=16M
# 控制是否使用, 使用幾個獨立purge線程(清除二進制日志)
innodb_purge_threads=4
# mysql在5.6之前一直都是單列索引限制767, 起因是256×3-1. 這個3是字符最大占用空間(utf8).
# 在5.6以后, 開始支持4個字節(jié)的uutf8. 255×4>767, 于是增加了這個參數(shù). 這個參數(shù)默認值是OFF. 當(dāng)改為ON時, 允許列索引最大達到3072
innodb_large_prefix=1
# InnoDB kernel并發(fā)最大的線程數(shù).
# 1) 最少設(shè)置為(num_disks+num_cpus)*2
# 2) 可以通過設(shè)置成1000來禁止這個限制
innodb_thread_concurrency=64
# 將死鎖相關(guān)信息保存到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
# 單位毫秒, 防止半同步復(fù)制在沒有收到確認的情況下, 發(fā)送堵塞. master在超時之前沒有收到確認, 將恢復(fù)到異步復(fù)制, 繼續(xù)執(zhí)行半同步?jīng)]有進行的操作
#loose_rpl_semi_sync_master_timeout=5000
[mysqld-5.7]
# 轉(zhuǎn)儲每個bp instance LRU上最熱的page的百分比. 通過設(shè)置該參數(shù)可以減少轉(zhuǎn)儲的page數(shù)
#innodb_buffer_pool_dump_pct=40
# Page cleaner并未和buffer pool綁定, 其模型為一個協(xié)調(diào)線程 + 多個工作線程, 協(xié)調(diào)線程本身也是工作線程.
# 如果innodb_page_cleaners設(shè)置為8, 那么就是一個協(xié)調(diào)線程, 加7個工作線程
#innodb_page_cleaners=4
# 開啟在線回收(收縮)undo log日志文件
#innodb_undo_log_truncate=1
# 當(dāng)超過這個閥值(默認是1G), 會觸發(fā)truncate回收(收縮)動作, truncate后空間縮小到10M
#innodb_max_undo_log_size=2G
# 控制回收(收縮)undo log的頻率
#innodb_purge_rseg_truncate_frequency=128
# mysql在搜尋GTID時是如何迭代使用binlog文件的. 這個選項設(shè)置為真, 會提升mysql執(zhí)行恢復(fù)的性能. 因為這樣mysql-server啟動和binlog日志清理更快
#binlog_gtid_simple_recovery=1
# 該參數(shù)控制 error log、genera log等等記錄日志的顯示時間參數(shù)
log_timestamps=system
# 這個神奇的參數(shù)5.7.6版本引入, 用于定義一個記錄事務(wù)的算法, 這個算法使用hash標識來記錄事務(wù).
# 如果使用MGR, 那么這個hash值需要用于分布式?jīng)_突檢測何處理.
# 在64位的系統(tǒng), 官網(wǎng)建議設(shè)置該參數(shù)使用 XXHASH64 算法. 如果線上并沒有使用該功能, 應(yīng)該設(shè)為off
#transaction_writeet_extraction=MURMUR32
#show_compatibility_56=on
[client]
default_character-set=utf8
[mysql]
default_character-set=utf8
重啟 mysql 服務(wù)
[root@DTDREAM-TRAINING-HUB-01 etc]# systemctl restart mysqld
查看 binlog 日志狀態(tài)
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 狀態(tài)
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 |
+----------------------------------+-----------+
查看服務(wù)器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)
查看服務(wù)器 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 主從 基于日志復(fù)制
安裝參考以上步驟,此處不再詳解
創(chuàng)建日志目錄
[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/
日志目錄權(quán)限修改
[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 配置文件
刪除原有內(nèi)容并復(fù)制以下內(nèi)容到配置文件中
[mysqld]
######## basic settings ########
# 服務(wù)器 ID , 主從唯一標識
server_id=10
# 監(jiān)聽端口
#port=3306
# 運行用戶
user=mysql
# 監(jiān)聽IP地址, 如果是127.0.0.1, 表示僅本機訪問
#bind_address=127.0.0.1
# 數(shù)據(jù)修改是否自動提交, 為0不自動提交
autocommit=1
# 服務(wù)器字符集 , utf8mb4為超字符集, 兼容UTF-8并可存儲4字節(jié)的圖片
character_set_server=utf8mb4
# 禁用DNS主機名查找, 啟用以后用內(nèi)網(wǎng)地址向mysqlslap請求響應(yīng)快一半
skip_name_resolve=1
# 最大連接數(shù)
max_connections=1024
# 主機連接錯誤次數(shù)等于max_connect_errors(默認10)時 , 再次嘗試連接將被屏蔽. 可有效防止DDOS攻擊
max_connect_errors=1000
# 數(shù)據(jù)存儲目錄
datadir=/opt/data/mysql
# socket方式運行文件存儲路徑
socket=/opt/data/mysql/mysql.sock
# 進程PID文件
pid_file=/opt/data/mysql/mysqld.pid
# 數(shù)據(jù)庫事務(wù)隔離級別
# 1. READ-UNCOMMITTED(讀取未提交內(nèi)容)級別
# 2. READ-COMMITTED(讀取提交內(nèi)容)
# 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
# 內(nèi)部內(nèi)存臨時表的最大值
tmp_table_size=128M
# 臨時文件目錄
tmpdir=/tmp
# 最大接受的數(shù)據(jù)包大小
max_allowed_packet=16M
# sql_mode 模式, 定義了你MySQL應(yīng)該支持的sql語法, 對數(shù)據(jù)的校驗等等, 限制一些所謂的不合法操作
sql_mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER"
# 服務(wù)器關(guān)閉交互式連接前等待活動的秒數(shù)
interactive_timeout=60
# 服務(wù)器關(guān)閉非交互連接之前等待活動的秒數(shù)
wait_timeout=60
# 讀入緩沖區(qū)的大小
read_buffer_size=16M
# 隨機讀緩沖區(qū)大小
read_rnd_buffer_size=32M
# connection緩存
sort_buffer_size=32M
######## log settings ########
# 錯誤日志文件
log_error=/opt/data/mysql/mysqld.log
# 是否開啟慢查詢?nèi)罩臼占? 1為啟用, 0為禁用
slow_query_log=1
# 慢查詢?nèi)罩疚募?slow_query_log_file=/opt/data/mysql/log/slow.log
# 記錄未使用索引的語句
log_queries_not_using_indexes=1
# 記錄管理型慢SQL
log_slow_admin_statements=1
# 記錄 slave 產(chǎn)生的慢查詢
log_slow_slave_statements=1
# 每分鐘記錄到日志的未使用索引的語句數(shù)目, 超過這個值后只記錄語句數(shù)量和花費的總時間
log_throttle_queries_not_using_indexes=10
# 日志過期時間天數(shù)
expire_logs_days=90
# binlog日志文件大小
max_binlog_size=100M
# 記錄慢查詢超時時間, 默認為秒
long_query_time=3
# 查詢返回少于該參數(shù)指定行的SQL不被記錄到慢查詢?nèi)罩?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, 當(dāng)事務(wù)提交之后, MySQL不做fsync之類的磁盤同步指令刷新binlog_cache中的信息到磁盤, 而讓Filesystem自行決定什么時候來做同步, 或者cache滿了之后才同步到磁盤
# sync_binlog=n, 當(dāng)每進行n次事務(wù)提交之后, MySQL將進行一次fsync之類的磁盤同步指令來將binlog_cache中的數(shù)據(jù)強制寫入磁盤
# MySQL中系統(tǒng)默認的設(shè)置是sync_binlog=0, 也就是不做任何強制性的磁盤刷新指令, 這時候的性能是最好的, 但是風(fēng)險也是最大的. 因為一旦系統(tǒng)Crash, 在binlog_cache中的所有binlog信息都會被丟失. 而
# 當(dāng)設(shè)置為"1"的時候, 是最安全但是性能損耗最大的設(shè)置. 因為當(dāng)設(shè)置為1的時候, 即使系統(tǒng)Crash, 也最多丟失binlog_cache中未完成的一個事務(wù), 對實際數(shù)據(jù)沒有任何實質(zhì)性影響.
# 從以往經(jīng)驗和相關(guān)測試來看, 對于高并發(fā)事務(wù)的系統(tǒng)來說, "sync_binlog"設(shè)置為0和設(shè)置為1的系統(tǒng)寫入性能差距可能高達5倍甚至更多
#sync_binlog=3
# 啟用 GTID 類型
#gtid_mode=on
# 強制 GTID 一致性
#enforce_gtid_consistency=1
# 主從一致性校驗算法
#binlog_checksum=CRC32
# slave更新是否記入日志, 在做雙主架構(gòu)時異常重要, 影響到雙主架構(gòu)是否能互相同步
#log_slave_updates=1
# binlog日志格式
#binlog_format=row
# 這個參數(shù)控制了當(dāng)mysql啟動或重啟時, mysql在搜尋GTIDs時是如何迭代使用binlog文件的. 這個選項設(shè)置為真, 會提升mysql執(zhí)行恢復(fù)的性能. 因為這樣mysql-server啟動和binlog日志清理更快
#binlog_gtid_simple_recovery=1
# 跳過指定error no類型的錯誤, 設(shè)成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, 當(dāng)事務(wù)提交之后, MySQL不做fsync之類的磁盤同步指令刷新binlog_cache中的信息到磁盤, 而讓Filesystem自行決定什么時候來做同步, 或者cache滿了之后才同步到磁盤
# sync_binlog=n, 當(dāng)每進行n次事務(wù)提交之后, MySQL將進行一次fsync之類的磁盤同步指令來將binlog_cache中的數(shù)據(jù)強制寫入磁盤
# MySQL中系統(tǒng)默認的設(shè)置是sync_binlog=0, 也就是不做任何強制性的磁盤刷新指令, 這時候的性能是最好的, 但是風(fēng)險也是最大的. 因為一旦系統(tǒng)Crash, 在binlog_cache中的所有binlog信息都會被丟失. 而
# 當(dāng)設(shè)置為"1"的時候, 是最安全但是性能損耗最大的設(shè)置. 因為當(dāng)設(shè)置為1的時候, 即使系統(tǒng)Crash, 也最多丟失binlog_cache中未完成的一個事務(wù), 對實際數(shù)據(jù)沒有任何實質(zhì)性影響.
# 從以往經(jīng)驗和相關(guān)測試來看, 對于高并發(fā)事務(wù)的系統(tǒng)來說, "sync_binlog"設(shè)置為0和設(shè)置為1的系統(tǒng)寫入性能差距可能高達5倍甚至更多
sync_binlog=3
# 啟用 GTID 類型
gtid_mode=on
# 強制 GTID 一致性
enforce_gtid_consistency=1
# binlog日志格式
binlog_format=row
# 設(shè)置 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 節(jié)點保存 master 節(jié)點信息方式 , 設(shè)定為 file 會生成master.info 和 relay-log.info 2個文件 ; 設(shè)定為 table 時信息就會存在 mysql.master_slave_info 表中
master_info_repository=TABLE
# 用于保存 slave 讀取 relay log 的位置信息
relay_log_info_repository=TABLE
# 當(dāng)slave從庫宕機后, 假如relay-log損壞了, 導(dǎo)致一部分中繼日志沒有處理, 則自動放棄所有未執(zhí)行的relay-log, 并且重新從master上獲取日志, 這樣就保證了relay-log的完整性
relay_log_recovery=1
# 這個參數(shù)控制了當(dāng)mysql啟動或重啟時, mysql在搜尋GTIDs時是如何迭代使用binlog文件的. 這個選項設(shè)置為真, 會提升mysql執(zhí)行恢復(fù)的性能. 因為這樣mysql-server啟動和binlog日志清理更快
binlog_gtid_simple_recovery=1
# 跳過指定error no類型的錯誤, 設(shè)成all 跳過所有錯誤
slave_skip_errors=ddl_exist_errors
# 在從庫執(zhí)行start slave的時候, 會將report-host和report-port(默認3306)發(fā)給主庫, 主庫記錄在全局哈希結(jié)構(gòu)變量 slave_list 中
# 如果想要連report-user和report-password也顯示出來, 則需要主庫配置參參數(shù)show-slave-auth-info
report_port=3306
report_host=172.16.0.167
######## innodb settings ########
# innodb每個數(shù)據(jù)頁大小
innodb_page_size=16K
# 緩存innodb表的索引、數(shù)據(jù), 插入數(shù)據(jù)時的緩沖, 專用mysql服務(wù)器設(shè)置的大小: 操作系統(tǒng)內(nèi)存的70%-80%最佳
innodb_buffer_pool_size=6G
# 可以開啟多個內(nèi)存緩沖池, 把需要緩沖的數(shù)據(jù)hash到不同的緩沖池中, 這樣可以并行的內(nèi)存讀寫
innodb_buffer_pool_instances=8
# 加載本地?zé)釘?shù)據(jù)到InnoDB緩存
innodb_buffer_pool_load_at_startup=1
# 停止MySQL服務(wù)時, InnoDB將InnoDB緩沖池中的熱數(shù)據(jù)保存到本地硬盤
innodb_buffer_pool_dump_at_shutdown=1
# page cleaner線程每次刷臟頁的數(shù)量
innodb_lru_scan_depth=2000
# 事務(wù)等待獲取資源等待的最長時間, 單位是秒
innodb_lock_wait_timeout=5
# 這兩個設(shè)置會影響InnoDB每秒在后臺執(zhí)行多少操作. 大多數(shù)寫IO(除了寫InnoDB日志)是后臺操作的.
# 如果深度了解硬件性能(如每秒可以執(zhí)行多少次IO操作),則使用這些功能是很可取的,而不是讓它閑著
#innodb_io_capacity=4000
#innodb_io_capacity_max=8000
# 默認值為 fdatasync.
# 如果使用 硬件RAID磁盤控制器, 可能需要設(shè)置為 O_DIRECT. 這在讀取InnoDB緩沖池時可防止雙緩沖(double buffering)效應(yīng), 否則會在文件系統(tǒng)緩存與InnoDB緩存間形成2個副本(copy).
# 如果不使用硬件RAID控制器,或者使用SAN存儲時, O_DIRECT 可能會導(dǎo)致性能下降
#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回滾段的數(shù)量, 至少大于等于35, 默認128
innodb_undo_logs=128
# 用于設(shè)定創(chuàng)建的undo表空間的個數(shù), 在mysql_install_db時初始化后, 就再也不能被改動了;
# 默認值為0, 表示不獨立設(shè)置undo的tablespace, 默認記錄到ibdata中; 否則, 則在undo目錄下創(chuàng)建這么多個undo文件,
# 例如假定設(shè)置該值為4, 那么就會創(chuàng)建命名為undo001~undo004的undo tablespace文件, 每個文件的默認大小為10M
# 修改該值會導(dǎo)致Innodb無法完成初始化, 數(shù)據(jù)庫無法啟動
#innodb_undo_tablespaces=0
# InnoDB存儲引擎在刷新一個臟頁時, 會檢測該頁所在區(qū)(extent)的所有頁, 如果是臟頁, 那么一起刷新.
# 這樣做的好處是通過AIO可以將多個IO寫操作合并為一個IO操作. 對于傳統(tǒng)機械硬盤建議使用, 而對于固態(tài)硬盤可以關(guān)閉
#innodb_flush_neighbors=1
# 日志文件的大小
innodb_log_file_size=4G
# 事務(wù)在內(nèi)存中的緩沖
innodb_log_buffer_size=16M
# 控制是否使用, 使用幾個獨立purge線程(清除二進制日志)
innodb_purge_threads=4
# mysql在5.6之前一直都是單列索引限制767, 起因是256×3-1. 這個3是字符最大占用空間(utf8).
# 在5.6以后, 開始支持4個字節(jié)的uutf8. 255×4>767, 于是增加了這個參數(shù). 這個參數(shù)默認值是OFF. 當(dāng)改為ON時, 允許列索引最大達到3072
innodb_large_prefix=1
# InnoDB kernel并發(fā)最大的線程數(shù).
# 1) 最少設(shè)置為(num_disks+num_cpus)*2
# 2) 可以通過設(shè)置成1000來禁止這個限制
innodb_thread_concurrency=64
# 將死鎖相關(guān)信息保存到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
# 單位毫秒, 防止半同步復(fù)制在沒有收到確認的情況下, 發(fā)送堵塞. master在超時之前沒有收到確認, 將恢復(fù)到異步復(fù)制, 繼續(xù)執(zhí)行半同步?jīng)]有進行的操作
#loose_rpl_semi_sync_master_timeout=5000
[mysqld-5.7]
# 轉(zhuǎn)儲每個bp instance LRU上最熱的page的百分比. 通過設(shè)置該參數(shù)可以減少轉(zhuǎn)儲的page數(shù)
#innodb_buffer_pool_dump_pct=40
# Page cleaner并未和buffer pool綁定, 其模型為一個協(xié)調(diào)線程 + 多個工作線程, 協(xié)調(diào)線程本身也是工作線程.
# 如果innodb_page_cleaners設(shè)置為8, 那么就是一個協(xié)調(diào)線程, 加7個工作線程
#innodb_page_cleaners=4
# 開啟在線回收(收縮)undo log日志文件
#innodb_undo_log_truncate=1
# 當(dāng)超過這個閥值(默認是1G), 會觸發(fā)truncate回收(收縮)動作, truncate后空間縮小到10M
#innodb_max_undo_log_size=2G
# 控制回收(收縮)undo log的頻率
#innodb_purge_rseg_truncate_frequency=128
# mysql在搜尋GTID時是如何迭代使用binlog文件的. 這個選項設(shè)置為真, 會提升mysql執(zhí)行恢復(fù)的性能. 因為這樣mysql-server啟動和binlog日志清理更快
#binlog_gtid_simple_recovery=1
# 該參數(shù)控制 error log、genera log等等記錄日志的顯示時間參數(shù)
log_timestamps=system
# 這個神奇的參數(shù)5.7.6版本引入, 用于定義一個記錄事務(wù)的算法, 這個算法使用hash標識來記錄事務(wù).
# 如果使用MGR, 那么這個hash值需要用于分布式?jīng)_突檢測何處理.
# 在64位的系統(tǒng), 官網(wǎng)建議設(shè)置該參數(shù)使用 XXHASH64 算法. 如果線上并沒有使用該功能, 應(yīng)該設(shè)為off
#transaction_write_set_extraction=MURMUR32
#show_compatibility_56=on
[client]
default_character-set=utf8
[mysql]
default_character-set=utf8
重啟 mysql 服務(wù)
[root@DTDREAM-TRAINING-HUB-01 etc]# systemctl restart mysqld
查看 binlog 日志狀態(tài)
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 狀態(tài)
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 |
+----------------------------------+-----------+
查看服務(wù)器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)
查看服務(wù)器 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 狀態(tài)
確認 Slave_IO_Running 和 Slave_SQL_Running 兩個參數(shù)都為 Yes 狀態(tài)
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)
主從測試
創(chuàng)建測試數(shù)據(jù)庫 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 庫中創(chuàng)建測試表 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 表中插入一條數(shù)據(jù)
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 日志狀態(tài)
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 是否已經(jīng)復(fù)制數(shù)據(jù)
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)