mysql 5.7主從安裝和配置

本文主要介紹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)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容