mysql5.623 GTID主从复制+半同步复制安装与配置
一、GTID簡介
什么是GTID
GTID(Global Transaction ID)是對于一個已提交事務的編號,并且是一個全局唯一的編號。
GTID實際上是由UUID+TID組成的。其中UUID是一個MySQL實例的唯一標識。TID代表了該實例上已經提交的事務數量,并且隨著事務提交單調遞增。下面是一個GTID的具體形式
3E11FA47-71CA-11E1-9E33-C80AA9429562:23
更詳細的介紹可以參見:官方文檔
GTID的作用
那么GTID功能的目的是什么呢?具體歸納主要有以下兩點:
1、根據GTID可以知道事務最初是在哪個實例上提交的
2、GTID的存在方便了Replication的Failover
?
二、介紹半同步復制
半同步復制可以作為默認的異步復制的替代方案,用以提高數據完整性。
使用半同步復制,提交操作只有當一個從服務器已經接收到更新,或者超時后才返回客戶端。因此,它可以確保數據存在于主服務器以及至少一個從服務器中(注意,提交操作返回時,從服務器已經接收到更新,但不一定已經應用了該更新)。
可以組合使用不同的復制模式,因此一些從服務器配置為異步復制,而其他從服務器使用半同步復制。這樣最終意味著開發人員/DBA能夠基于每個從服務器確定合適的數據一致性和性能級別。
以上描述的不同復制模式可以與完全同步復制進行比較,后者使用“兩階段提交”協議同時將數據提交到兩個或者更多實例中。同步復制能夠確保多個系統之間的一致性,故障時提供更快的故障轉移時間,但是會因為在節點之間傳遞更多的消息導致性能消耗。
三、環境
環境
系統:centos6.5
master IP: 172.19.0.105
slave IP:172.19.0.102
mysql版本:5.6.23
四、mysql安裝(兩臺)
1、采用yum安裝依賴包
yum -y install gcc gcc-c++ gcc-g77 autoconf automake zlib* fiex* libxml* ncurses-devel libmcrypt* libtool-ltdl-devel*? cmake? bison
2、創建mysql用戶與用戶組
groupadd mysql
useradd -r -g mysql mysql
3.解壓安裝mysql源代碼包
tar zxvf mysql-5.6.23.tar.gz
cd mysql-5.6.23
cmake ./ -DCMAKE_INSTALL_PREFIX=/opt/mysql/ -DMYSQL_DATADIR=/opt/mysql/data -DMYSQL_UNIX_ADDR=/opt/mysql/data/mysqld.sock -DWITH_INNOBASE_STORAGE_ENGINE=1? -DENABLED_LOCAL_INFILE=1 -DMYSQL_TCP_PORT=3306 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DMYSQL_UNIX_ADDR=/opt/mysql/data/mysql.sock -DMYSQL_USER=mysql? -DWITH_DEBUG=0
?
make && make install
?
4、賦予相關權限
chown -R mysql:mysql /opt/mysql
?
/opt/mysql/scripts/mysql_install_db --user=mysql --basedir=/opt/mysql?? --datadir=/opt/mysql/data
5、mysql配置文件
cp support-files/my-default.cnf /etc/my.cnf??? #配置文件
cp support-files/mysql.server /etc/init.d/mysql? #啟動文件
chmod +x /etc/init.d/mysql??
?
mkdir /opt/mysql/logs??? #創建存放日志文件
chown -R mysql:mysql /opt/mysql/logs? #賦予相關權限
chkconfig mysql on??? #增加開機啟動
6、啟動?mysql
/etc/init.d/mysql start
7、設置mysql初始密碼,123456是密碼,你可以設置自己需要的密碼
/opt/mysql/bin/mysqladmin -u root password '123456'
8、增加軟連接
ln -s /opt/mysql/bin/* /usr/bin/??
五、主從模式配置
1、配置master節點??在[mysqld]下增加
log-bin=master-bin
binlog_format = ROW
log_slave_updates=true
gtid-mode=on
enforce-gtid-consistency=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=4 #開啟基于庫的多線程復制。默認是0,不開啟,最大并發數為1024個線程
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
report-port=3306
report-host=MASTER
?
2、配置slave節點??在[mysqld]下增加把server-id??? = 1修改成2與master要不一樣,否則會報錯
server-id? = 2
log-bin=mysql-bin
binlog_format = ROW
log_slave_updates=true
gtid-mode=on
enforce-gtid-consistency=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=4 #開啟基于庫的多線程復制。默認是0,不開啟,最大并發數為1024個線程
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
report-port=3306
report-host=SLAVE
3、master與slave配置好重啟
/etc/init.d/mysql restart
4、創建復制用戶
在主庫(master)執行
GRANT REPLICATION SLAVE ON *.*? TO 'repl'@'172.19.0.%'? IDENTIFIED BY 'repl';
flush privileges;
?
在主庫(master)執行安裝相關插入件啟動半同步復制
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
SET GLOBAL rpl_semi_sync_master_enabled=1;
SET GLOBAL rpl_semi_sync_master_timeout=1000;
在從庫(slave)執行安裝相關插入件啟動半同步復制
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
SET GLOBAL rpl_semi_sync_slave_enabled=1;
在從庫(slave)執行復制連接
?
CHANGE MASTER TO MASTER_HOST='172.19.0.105',MASTER_USER='repl',MASTER_PASSWORD='repl',master_auto_position=1,master_delay=20;
?
start slave;
查看主從已經啟動gtid功能
在主庫查看連接的slave主機
查看從庫復制狀態
?
?
以上說明成功
下面是我修改一些參數配置為了優化,大家可以根據自己環境來修改
主庫(master)配置:
?
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
[client]
port?????????? = 3306
socket??????????????? = /opt/mysql/data/mysql.sock
default-character-set = utf8
################Basic############
[mysqld]
server-id? = 1
port?????????? = 3306
socket??????????????? = /opt/mysql/data/mysql.sock
skip-external-locking
skip-name-resolve
default-storage-engine=INNODB
character-set-server=utf8
wait_timeout=500
connect_timeout=20
interactive_timeout=500
back_log=500
event_scheduler=ON
?
##########binlog##########
expire-logs-days=5
log-bin=master-bin
?
binlog_format = ROW
log_slave_updates=true
gtid-mode=on
enforce-gtid-consistency=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=2? #開啟基于庫的多線程復制。默認是0,不開啟,最大并發數為1024個線程
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
report-port=3306
report-host=MASTER
#############半同步###########
rpl_semi_sync_master_enabled=1?
rpl_semi_sync_master_timeout=1000?
rpl_semi_sync_master_trace_level=32?
rpl_semi_sync_master_wait_no_slave=on
#######################
max_binlog_size=128M
binlog_cache_size=2M
sync_binlog=1
#################slow log ###########
slow-query_log=1
slow-query_log_file=/opt/mysql/logs/mysql.slow
long_query_time=2
####################error log####
log_error=/opt/mysql/logs/error.log
#################per_thread_buffers#############
max_connections=1024
max_user_connections=2000
max_connect_errors=10000
key_buffer_size=64M
max_allowed_packet=128M
table_open_cache=6144
table_definition_cache=4096
sort_buffer_size=512k
read_buffer_size=512k
read_rnd_buffer_size=512k
join_buffer_size=512k
tmp_table_size=64M
max_heap_table_size=64M
query_cache_type=0
query_cache_size=0
bulk_insert_buffer_size=32M
thread_cache_size=64
thread_concurrency=32
thread_stack=256K
################INNODB################
innodb_data_home_dir = /opt/mysql/data
innodb_log_group_home_dir = /opt/mysql/data
innodb_data_file_path = ibdata1:10M:autoextend
innodb_buffer_pool_size=2G
innodb_buffer_pool_instances = 4
innodb_flush_log_at_trx_commit=1
innodb_lock_wait_timeout=10
innodb_file_per_table
innodb_log_files_in_group=3
innodb_support_xa=1
innodb_sync_spin_loops=40
innodb_max_dirty_pages_pct=90
innodb_additional_mem_pool_size=20M
innodb_log_buffer_size=128M
innodb_flush_method=O_DIRECT
innodb_file_format=Barracuda
innodb_io_capacity=2000
log_bin_trust_function_creators=1
innodb_purge_threads=1
innodb_purge_batch_size=32
innodb_old_blocks_pct=75
transaction_isolation=READ-COMMITTED
#innodb_read_io_threads=8
#innodb_write_io_threads=8
[mysqldump]
quick
max_allowed_packet=128M
myisam_max_sort_sort_file_size=2G
[mysql]
no-auto-rehash
?
[myisamchk]
key_buffer_size = 64M
sort_buffer_size =256K
read_buffer = 2M
write_buffer = 2M
?
[mysqlhotcopy]
interactive-timeout
?
?
從庫(slave)配置:
?
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
[client]
port?????????? = 3306
socket??????????????? = /opt/mysql/data/mysql.sock
default-character-set = utf8
################Basic############
[mysqld]
server-id? = 2
port?????????? = 3306
socket??????????????? = /opt/mysql/data/mysql.sock
skip-external-locking
skip-name-resolve
default-storage-engine=INNODB
character-set-server=utf8
wait_timeout=500
connect_timeout=20
interactive_timeout=500
back_log=500
event_scheduler=ON
##########binlog##########
expire-logs-days=5
log-bin=mysql-bin
?
binlog_format = ROW
log_slave_updates=true
gtid-mode=on
enforce-gtid-consistency=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=2
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
report-port=3306
report-host=SLAVE
?
##############半同步#####################
rpl_semi_sync_slave_enabled=1
##################################
max_binlog_size=128M
binlog_cache_size=2M
sync_binlog=1
#################slow log ###########
slow-query_log=1
slow-query_log_file=/opt/mysql/logs/mysql.slow
long_query_time=2
####################error log####
log_error=/opt/mysql/logs/error.log
#################per_thread_buffers#############
max_connections=1024
max_user_connections=2000
max_connect_errors=10000
key_buffer_size=64M
max_allowed_packet=128M
table_open_cache=6144
table_definition_cache=4096
sort_buffer_size=512k
read_buffer_size=512k
read_rnd_buffer_size=512k
join_buffer_size=512k
tmp_table_size=64M
max_heap_table_size=64M
query_cache_type=0
query_cache_size=0
bulk_insert_buffer_size=32M
thread_cache_size=64
thread_concurrency=32
thread_stack=256K
################INNODB################
innodb_data_home_dir = /opt/mysql/data
innodb_log_group_home_dir = /opt/mysql/data
innodb_data_file_path = ibdata1:10M:autoextend
innodb_buffer_pool_size=2G
innodb_buffer_pool_instances = 4
innodb_flush_log_at_trx_commit=1
innodb_lock_wait_timeout=10
innodb_file_per_table
innodb_log_files_in_group=3
innodb_support_xa=1
innodb_sync_spin_loops=40
innodb_max_dirty_pages_pct=90
innodb_additional_mem_pool_size=16M
innodb_log_buffer_size=64M
innodb_flush_method=O_DIRECT
innodb_file_format=Barracuda
innodb_io_capacity=2000
log_bin_trust_function_creators=1
innodb_purge_threads=1
innodb_purge_batch_size=32
innodb_old_blocks_pct=75
transaction_isolation=READ-COMMITTED
#innodb_read_io_threads=8
#innodb_write_io_threads=8
[mysqldump]
quick
max_allowed_packet=128M
myisam_max_sort_sort_file_size=2G
[mysql]
no-auto-rehash
?
[myisamchk]
key_buffer_size = 64M
sort_buffer_size =256K
read_buffer = 2M
write_buffer = 2M
?
[mysqlhotcopy]
interactive-timeout
?
?
主從修改配置后,我們重啟mysql數據庫,在來查看半同步復制
主庫查看半同步復制
從庫查看半同步復制
上圖說明半同步復制成功
?
?
本文轉自 jxzhfei ?51CTO博客,原文鏈接:http://blog.51cto.com/jxzhfei/1636019
總結
以上是生活随笔為你收集整理的mysql5.623 GTID主从复制+半同步复制安装与配置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 3Dmax怎么制作创建非常精致的3D钻石
- 下一篇: 如何进行Ubuntu on Window