mysql5.7gtid主从同步部署

master: 192.128.232.131

slave: 192.128.232.130

#安装mysql多版本脚本

[root@mysql-131 ~]# cat /usr/local/src/install_mysql.sh
#!/bin/bash
Mysql_Pid=`ps -ef |grep mysqld|grep -v grep|awk '{print $2}'|wc -l`
if [ ${Mysql_Pid} != 0 ];then
  echo -e "\033[31m mysql server exists,please check this mysql server \033[0m"
  echo -n "Enter you  continue or exit to choice:"
  read choice
  if [ $choice == "continue" ];then
     ps -ef |grep mysqld|grep -v grep|awk '{print $2}'|xargs kill -9
     unlink /usr/local/mysql
     rm /usr/local/mysql-* -rf
     rm -rf /data/mysql_data
  elif [ $choice == "exit" ];then
     exit 1
  fi
fi
rpm -q libaio >/dev/null || yum -y install libaio > /dev/null
if id -g mysql >/dev/null 2>&1
then
   echo "mysql group exists"
else
   groupadd mysql >/dev/null 2>&1 && echo "creating mysql group success"
fi

if id -u mysql >/dev/null 2>&1;then
   echo "mysql user exists"
else
   useradd -r -g mysql -s /sbin/nologin mysql >/dev/null 2>&1 && echo "creating mysql user success"
fi

src_binary_dir=/usr/local/src
install_dir=/usr/local
mydatadir=/data/mysql_data

[ -d $mydatadir ] || mkdir -p $mydatadir
echo -n "Enter you version of Mysql:"
read version
cd ${src_binary_dir}
if [ ${version} == "8.0" ];then
   tar -Jxvf $(/usr/bin/ls mysql-${version}.*.tar.xz) -C ${install_dir}
elif [ ${version} == "5.6" ];then
   tar -zxf $(/usr/bin/ls mysql-${version}.*.tar.gz) -C ${install_dir}
elif [ ${version} == "5.7" ];then
   tar -zxf $(/usr/bin/ls mysql-${version}.*.tar.gz) -C ${install_dir}
else
   echo -e "\033[31m please Enter 5.6 or 5.7 or 8.0 string to install \033[0m"
   exit 1
fi

cd ${install_dir}
ln -s $(ls -d mysql-${version}.*) mysql

echo "export PATH=/usr/local/mysql/bin:$PATH" > /etc/profile.d/mysql_path.sh
source /etc/profile.d/mysql_path.sh

cat >/etc/my.cnf <<EOF
[mysql]
prompt=(\\u@\\h) [\\d]\\_

[mysqld]
skip-name-resolve
port = 3306
basedir=/usr/local/mysql
datadir= /data/mysql_data/data
log_error = /data/mysql_data/logs/error.log
max_connections=200
character-set-server=utf8
default-storage-engine=INNODB
max_allowed_packet=16M
EOF

cd mysql
case $version in
5.7)
  mkdir -p /data/mysql_data/{data,logbin,logs}
  chown -R  mysql.mysql /usr/local/mysql*
  chown -R  mysql.mysql /data/mysql_data
  ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql_data/data > /dev/null 2>&1
  [ $? -eq 0 ] && echo "Installing mysql server success"
  \cp -rf ./support-files/mysql.server /etc/rc.d/init.d/mysqld
  chmod +x /etc/rc.d/init.d/mysqld
  /etc/init.d/mysqld start
  [ $? -eq 0 ] && echo "Starting mysql server success"
  cat /data/mysql_data/error.log |grep "password"|awk -F':' '{print $NF}' > /tmp/mysql_password.txt
  sed -i 's/^[ \t]*//g' /tmp/mysql_password.txt
;;

5.6)
  yum install autoconf perl perl-devel perl-Data-Dumper -y >/dev/null 2>&1
  chown -R  mysql.mysql /usr/local/mysql*
  ./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql_data/data > /dev/null 2>&1
  [ $? -eq 0 ] && echo "Installing mysql server success"
  \cp -rf ./support-files/mysql.server /etc/rc.d/init.d/mysqld
  chmod +x /etc/rc.d/init.d/mysqld
  /etc/init.d/mysqld start
  [ $? -eq 0 ] && echo "Startting mysql server success"
;;

8.0)
  mkdir -p /data/mysql_data/{data,logbin,logs}
  chown -R  mysql.mysql /usr/local/mysql*
  chown -R  mysql.mysql /data/mysql_data
  ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql_data/data > /dev/null 2>&1
  [ $? -eq 0 ] && echo "Installing mysql server success"
  \cp -rf ./support-files/mysql.server /etc/rc.d/init.d/mysqld
  chmod +x /etc/rc.d/init.d/mysqld
  /etc/init.d/mysqld start
  [ $? -eq 0 ] && echo "Startting mysql server success"
  cat /data/mysql_data/logs/error.log |grep "root@localhost"|awk -F':' '{print $NF}' > /tmp/mysql_password.txt
  sed -i 's/^[ \t]*//g' /tmp/mysql_password.txt

;;

esac

二:master节点配置文件

[root@mysql-131 ~]# cat /etc/my.cnf
[client]
user=root
password=1111aaA_          #几个实例的密码一定要设置这个。否则无法停止。

[mysql]
prompt=(\u@\h) [\d]\_
no-auto-rehash

[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
log = /usr/local/mysql/mysqld_multi.log

[mysqld56]
skip-name-resolve
port = 3306
server-id = 131
basedir = /usr/local/mysql
datadir = /data/mysql_data/data
socket = /tmp/mysql.sock
log_error = /data/mysql_data/logs/error.log
event_scheduler = 1
sql_mode = "ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
binlog_format = row
transaction-isolation = READ-COMMITTED
log_bin=/data/mysql_data/logbin/mysql-binlog
binlog_rows_query_log_events = 1

#skip-grant-tables

#slow log
slow_query_log = 1
slow_query_log_file=/data/mysql_data/logs/mysql-slow.log
long_query_time=2
log_queries_not_using_indexes = 1

#session memory
sort_buffer_size = 64M
tmp_table_size = 64M

#replication
slave_parallel_workers = 16
slave_parallel_type = LOGICAL_CLOCK
read_only=1

#rpl_semi
plugin_load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl_semi_sync_master_enabled=1
rpl_semi_sync_slave_enabled=1
rpl_semi_sync_master_timeout=100000
rpl_semi_sync_master_wait_for_slave_count = 1
rpl_semi_sync_master_wait_point = AFTER_SYNC

#innodb
innodb_log_file_size = 4G
innodb_log_buffer_size = 16M
innodb_log_files_in_group=2
innodb_buffer_pool_size = 1024M
innodb_buffer_pool_instances = 16
innodb_online_alter_log_max_size = 512M
innodb_write_io_threads = 16
innodb_page_size = 16384
innodb_flush_method = O_DIRECT
innodb_io_capacity = 4000
innodb_page_cleaners = 4
innodb_fast_shutdown = 1
innodb_flush_neighbors = 0
innodb_purge_threads = 8
innodb_lock_wait_timeout = 300
innodb_autoinc_lock_mode = 2
innodb_status_output_locks = 1
innodb_print_all_deadlocks = 1

#relay
relay_log_recovery = 1
relay_log_info_repository = table
master_info_repository = table
log_slave_updates

#gtid
gtid-mode = ON
enforce-gtid-consistency = ON

三。slave节点配置

[root@mysql-130 data]# cat /etc/my.cnf
[client]
user=root
password=1111aaA_          #几个实例的密码一定要设置这个。否则无法停止。

[mysql]
prompt=(\u@\h) [\d]\_
no-auto-rehash

[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
log = /usr/local/mysql/mysqld_multi.log

[mysqld56]
skip-name-resolve
port = 3306
server-id = 130
basedir = /usr/local/mysql
datadir = /data/mysql_data/data
socket = /tmp/mysql.sock
log_error = /data/mysql_data/logs/error.log
event_scheduler = 1
sql_mode = "ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
binlog_format = row
transaction-isolation = READ-COMMITTED
log_bin=/data/mysql_data/logbin/mysql-binlog
binlog_rows_query_log_events = 1

#skip-grant-tables

#slow log
slow_query_log = 1
slow_query_log_file=/data/mysql_data/logs/mysql-slow.log
long_query_time=2
log_queries_not_using_indexes = 1

#session memory
sort_buffer_size = 64M
tmp_table_size = 64M

#replication
slave_parallel_workers = 16
slave_parallel_type = LOGICAL_CLOCK
read_only=1

super_read_only = 1

#rpl_semi
plugin_load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl_semi_sync_master_enabled=1
rpl_semi_sync_slave_enabled=1
rpl_semi_sync_master_timeout=100000
rpl_semi_sync_master_wait_for_slave_count = 1
rpl_semi_sync_master_wait_point = AFTER_SYNC

#innodb
innodb_log_file_size = 4G
innodb_log_buffer_size = 16M
innodb_log_files_in_group=2
innodb_buffer_pool_size = 1024M
innodb_buffer_pool_instances = 16
innodb_online_alter_log_max_size = 512M
innodb_write_io_threads = 16
innodb_page_size = 16384
innodb_flush_method = O_DIRECT
innodb_io_capacity = 4000
innodb_page_cleaners = 4
innodb_fast_shutdown = 1
innodb_flush_neighbors = 0
innodb_purge_threads = 8
innodb_lock_wait_timeout = 300
innodb_autoinc_lock_mode = 2
innodb_status_output_locks = 1
innodb_print_all_deadlocks = 1

#relay
relay_log_recovery = 1
relay_log_info_repository = table
master_info_repository = table
log_slave_updates

#gtid
gtid-mode = ON
enforce-gtid-consistency = ON

四:gtid主从同步配置

1:master节点

    [root@mysql-131 ~]# mysql -uroot -p'1111aaA_' -e "grant replication slave on *.* to 'repl'@'192.128.232.%' identified by 'repl123QWE'; flush privileges;"

[root@mysql-131 ~]# mysqldump -uroot -p'1111aaA_' -A -R -E --triggers --master-data=2  --single-transaction --max_allowed_packet=128M --set-gtid-purged=OFF > /tmp/full.sql
[root@mysql-131 ~]# scp /tmp/full.sql 192.128.232.130:/tmp/                                                                         

2:slave节点

[root@mysql-130 data]# mysql

(root@localhost) [mysql] source /tmp/full.sql;
 

(root@localhost) [(none)] CHANGE MASTER TO MASTER_HOST='192.128.232.131',MASTER_PORT=3306,MASTER_USER='repl',MASTER_PASSWORD='repl123QWE',MASTER_AUTO_POSITION = 1;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

(root@localhost) [(none)] start slave;
Query OK, 0 rows affected (0.67 sec)


(root@localhost) [(none)] show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.128.232.131
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-binlog.000004
          Read_Master_Log_Pos: 885
               Relay_Log_File: mysql-130-relay-bin.000006
                Relay_Log_Pos: 1104
        Relay_Master_Log_File: mysql-binlog.000004
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

3,master节点,创建一个测试haha库,看slave节点是否可以同步

(root@localhost) [(none)] create database haha;
Query OK, 1 row affected (0.00 sec)
 

4,slave节点,查看haha库

[root@mysql-130 tmp]# mysql -e "show databases"|grep "haha"
haha
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL 5.7引入了GTID(Global Transaction Identifier)特性,这对于高可用性和故障恢复非常重要。GTID提供了一种跟踪跨多个数据库实例的事务的方式,使得主从复制更为可靠。下面是安装和配置MySQL 5.7 GTID主从的一般步骤: 1. **安装MySQL 5.7**: - 下载MySQL 5.7的二进制包,可以从MySQL官网下载适用于你操作系统的版本。 - 按照官方文档的指示进行安装,确保在安装过程中选择“GTID”作为复制模式。 2. **初始化主服务器**: - 配置my.cnf文件,开启GTID相关选项,例如设置`gtid_mode=ON` 和 `enforce_gtid_consistency=ON`。 - 启动MySQL服务并创建一个包含GTID的初始数据库实例。 3. **启用二进制日志**: - 在my.cnf中配置`log_bin`和`expire_logs_days`以管理二进制日志,这对主从复制至关重要。 4. **配置主从复制**: - 创建复制用户并分配合适的权限,如`REPLICATION SLAVE`。 - 在主服务器上执行`CHANGE MASTER TO`命令来指定从服务器的信息,包括GTID的位置(例如,`MASTER_GTID_FILE`和`MASTER_BINLOG_POS`)。 5. **启动从服务器**: - 使用相同的GTID配置启动从服务器。 - 运行`START SLAVE`命令,让从服务器开始同步数据。 6. **监控和调试**: - 定期检查`SHOW MASTER STATUS`和`SHOW SLAVE STATUS\G`来确保复制状态正常。 - 如果遇到问题,查看错误日志和使用`mysqlbinlog`工具分析事务历史。 **相关问题--:** 1. GTID是什么,它如何提高复制的可靠性? 2. 在配置主从复制时,如何正确设置`CHANGE MASTER TO`命令? 3. 有哪些常见的GTID复制问题及解决方法?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值