搭建mysql主从复制【gtid】模式

搭建mysql主从复制【gtid】模式

mysql版本:5.7.34

操作系统:centos7.9

网络设置

host 描述
192.168.197.134
192.168.197.135

MASTER(主)服务安装(192.168.197.134)

建议新建一样的目录这样命令可以直接复制使用

安装mysql

my.cnf–拷贝到/etc下

[client]
no-beep
port=3002
socket = /data/tool/mysql/data/mysql.sock
[mysql]
socket = /data/tool/mysql/data/mysql.sock
default-character-set=utf8mb4
[mysqld]
lower_case_table_names=1
port=3002
basedir = /data/tool/mysql
datadir= /data/tool/mysql/data
tmpdir = /data/tool/mysql/data
socket = /data/tool/mysql/data/mysql.sock
character-set-server=utf8mb4
default-storage-engine=INNODB
explicit_defaults_for_timestamp = true
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
log-output=FILE
general-log=1
general_log_file=/data/tool/mysql/logs/MS.log
slow-query-log=1
slow_query_log_file=/data/tool/mysql/logs/slow.log
long_query_time=10
max_allowed_packet=1G
innodb_log_buffer_size=512M
log-bin=/data/tool/mysql/mysql_bin
gtid-mode=on #开启gtid模式
enforce-gtid-consistency=on #强制gtid一致性,开启后对特定的create table不被支持
binlog-format=row  #默认为mixed混合模式,更改成row复制,为了数据一致性
log-slave-updates=1  #从库binlog才会记录主库同步的操作日志
skip-slave-start=1   #跳过slave复制线程
log-error=/data/tool/mysql/logs/error.log
server-id=1
expire_logs_days=7
max_connections=2000
query_cache_size=0
table_open_cache=2000
tmp_table_size=246M
thread_cache_size=300
#限定用于每个数据库线程的栈大小。默认设置足以满足大多数应用
thread_stack = 192k
key_buffer_size=512M
read_buffer_size=4M
read_rnd_buffer_size=32M
innodb_data_home_dir = /data/tool/mysql/data
innodb_flush_log_at_trx_commit=0
innodb_buffer_pool_size=256M
innodb_log_file_size=128M
innodb_thread_concurrency=128
innodb_autoextend_increment=1000
innodb_buffer_pool_instances=8
innodb_concurrency_tickets=5000
innodb_old_blocks_time=1000
innodb_open_files=300
innodb_stats_on_metadata=0
innodb_file_per_table=1
innodb_page_size=32K
innodb_file_format=Barracuda
innodb_checksum_algorithm=0
back_log=80
flush_time=0
join_buffer_size=128M
max_connect_errors=2000
open_files_limit=4161
query_cache_type=0
sort_buffer_size=32M
table_definition_cache=1400
binlog_row_event_max_size=8K
sync_master_info=10000
sync_relay_log=10000
sync_relay_log_info=10000
#批量插入数据缓存大小,可以有效提高插入效率,默认为8M
bulk_insert_buffer_size = 64M
interactive_timeout = 120
wait_timeout = 120
log-bin-trust-function-creators=1
#拷贝下载的mysql安装包【mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz】到/data/tool下
cd /data/tool

groupadd mysql #添加用户组
useradd -g mysql mysql #添加用户

tar -zxvf mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz
#修改解压后的文件为mysql
mv mysql-5.7.34-linux-glibc2.12-x86_64 mysql
cd mysql
mkdir data
mkdir logs
#授权给mysql用户
chown -R mysql:mysql ./

#拷贝my.cnf到/etc下

#无密码安装
./bin/mysqld --initialize-insecure --user=mysql --basedir=/data/tool/mysql --datadir=/data/tool/mysql/data

#启动服务
./support-files/mysql.server restart

#进入sql 修改远程访问
./bin/mysql -uroot -p
use mysql;
UPDATE `mysql`.`user` SET `Host` = '%',  `User` = 'root'  WHERE (`Host` = 'localhost') AND (`User` = 'root');
flush privileges;

#因为是无密码安装,测试连接正常后记得修改root密码

#开机启动
cd /data/tool/mysql/support-files/
cp mysql.server /etc/init.d/mysql
vi /etc/init.d/mysql
#将mysql目录填上:
basedir=/data/tool/mysql/
datadir=/data/tool/mysql/data/
#授权:
chmod +x /etc/init.d/mysql
#设为开机启动:
chkconfig --add mysql
#重启服务:
service mysql restart
#停止服务:
service mysql stop
#启动服务:
service mysql start
#查看服务:
service mysql status

然后就可以用连接工具操作了。

#检查 uuid
SHOW VARIABLES LIKE '%server_uuid%';

在这里插入图片描述

#检查gtid状态
SHOW  VARIABLES LIKE '%gtid%';

搭建mysql主从复制【gtid】模式_第1张图片

#新建从库同步数据库用户
#CREATE USER '账号'@'host(看情况填写)' IDENTIFIED BY "密码";
CREATE USER 'slave'@'192.168.197.135' IDENTIFIED BY "slave";
#授权
GRANT REPLICATION SLAVE ON *.* TO  'slave'@'192.168.197.135'  ;
#刷新
FLUSH PRIVILEGES;
#查看 master 状态
SHOW MASTER STATUS;

搭建mysql主从复制【gtid】模式_第2张图片

SLAVE(从)服务安装(192.168.197.135)

如果是vm安装的就复制一个vm修改一下ip和my.cnf里面的server-id,并且删除/data/tool/mysql/data/auto.cnf 文件重新启动mysql即可

#如果是vm直接复制会导致 server_uuid 一直要删除下面的文件就可以自动重新生成
rm -rf /data/tool/mysql/data/auto.cnf 

如果不是vm安装就上面的安装过程在【从服务器(192.168.197.134)】再执行一次,只是修改my.cnf里么server-id

安装完成后同样用连接工具操作即可

#检查 uuid 这一部很重要如果发现和 master 一样就按照上面说的路径删掉【auto.cnf】
SHOW VARIABLES LIKE '%server_uuid%';

搭建mysql主从复制【gtid】模式_第3张图片

#检查gtid状态
SHOW  VARIABLES LIKE '%gtid%';

搭建mysql主从复制【gtid】模式_第4张图片

#停止slave 如果第一次不需要执行
STOP SLAVE;
#重置 slave
RESET SLAVE ALL;
#配置 master 节点信息
CHANGE MASTER TO
    MASTER_HOST='192.168.197.134',
    MASTER_PORT=3002,
    MASTER_USER='slave',
    MASTER_PASSWORD='slave',
    master_auto_position=1;
#启动 slave
START SLAVE
#检查slave状态
#主要看红框两个字段值 都是yes说明成功了,如果有失败的 就看错误日志字段会提示(下面有图)
SHOW SLAVE STATUS

搭建mysql主从复制【gtid】模式_第5张图片错误了看这两个搭建mysql主从复制【gtid】模式_第6张图片

激动人心的测试环节

master 上新建库表并且插入数据

CREATE DATABASE /*!32312 IF NOT EXISTS*/`test` /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
USE test;
CREATE TABLE `t1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;

/*Data for the table `t1` */
insert  into `t1`(`id`,`name`) values (1,'a'),(2,'b'),(3,'c');

执行完成后
slave 上查看是否同步
搭建mysql主从复制【gtid】模式_第7张图片
其他命令

# 使用reset master,该命令将会删除所有日志,并让日志文件重新从000001开始。
reset master

你可能感兴趣的:(mysql,mysql,数据库,java)