mysql8集群部署

Posted 码海小虾米_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql8集群部署相关的知识,希望对你有一定的参考价值。

mysql8集群部署

环境情况:

服务器IP:

192.168.81.235			centos7.6				网易yum源
192.168.81.236			centos7.6				网易yum源
192.168.81.237			centos7.6				网易yum源

清除残留数据库

#卸载mariadb和mysql
rpm -qa | grep mariadb | xargs rpm -e --nodeps
rpm -qa | grep mysql | xargs rpm -e --nodeps

1、三台都配置hosts和修改hostname

192.168.81.235		hostnamectl set-hostname mysql1
192.168.81.236		hostnamectl set-hostname mysql2
192.168.81.237		hostnamectl set-hostname mysql3
vim /etc/hosts
---------------------------
192.168.81.235		mysql1
192.168.81.236		mysql2
192.168.81.237		mysql3

三台服务器互相ping命令测试配置情况

ping mysql1
ping mysql2
ping mysql3

2、设置三台服务器之间互相免交互

每台都需要做,这边只写了一台的步骤

ssh-keygen -t rsa									##生成密钥对文件,一直回车即可	
scp /root/.ssh/id_rsa.pub root@mysql2:/root			##将公钥传给mysql2和mysql3
scp /root/.ssh/id_rsa.pub root@mysql3:/root			

## 在mysql2 和 mysql3 上操作,将mysql1的公钥导入自己的公钥库中
cat /root/id_rsa.pub >> /root/.ssh/authorized_keys

## 在mysql1上确定免密是否完成
ssh mysql2
ssh mysql3

验证结果如下:

3、三台服务器安装mysql 8

mysql8和mysql-shell下载地址:
https://dev.mysql.com/downloads/mysql/
https://dev.mysql.com/downloads/shell/

tar xf mysql-8.0.28-el7-x86_64.tar.gz
mv mysql-8.0.28-el7-x86_64 mysql
groupadd mysql
useradd -r -g mysql -s /sbin/nologin mysql
mkdir /data/mysql/data
mkdir /data/mysql/logs
chown -R mysql:mysql /data/mysql

4、创建my.cnf文件(集群注意server_id需要不同!!)

cat << EOF > /etc/my.cnf
[mysqld]
basedir=/data/mysql
datadir=/data/mysql/data
log-error=/data/mysql/logs/mysql.log
socket=/tmp/mysql.sock
pid-file=/tmp/mysql.pid

event_scheduler=ON

#慢查询sql日志设置
slow_query_log=ON
slow_query_log_file=/data/mysql/logs/mysql-slow.log
long_query_time=1
#作为从库时生效,从库复制中如何有慢sql也将被记录
#log_slow_replica_statements = 1
#检索的行数必须达到此值才可被记为慢查询
min_examined_row_limit = 100
#mysql binlog日志文件保存的过期时间,过期后自动删除
binlog_expire_logs_seconds = 7

#Mysql服务的唯一编号 每个mysql服务Id需唯一
server-id = 3
log_bin = binlog

# 跳过密码登录
#skip-grant-tables
#只能用IP地址检查客户端的登录,不用主机名
skip-name-resolve
#skip-external-locking

#最大连接数
max_connections = 100000
#最大错误连接数
max_connect_errors = 50000
# MySQL能有的连接数量
back_log = 600
# MySQL打开的文件描述符限制
open_files_limit = 65535

innodb_open_files = 5000
# 限制Innodb能打开的表的数据,如果库里的表特别多的情况,请增加这个。这个值默认是300
innodb_buffer_pool_size = 20G
# InnoDB使用一个缓冲池来保存索引和原始数据, 不像MyISAM.
# 这里你设置越大,你在存取表里面数据时所需要的磁盘I/O越少.


#开启GTID,必须开启
gtid_mode=on
enforce-gtid-consistency=on
binlog_format=ROW
transaction_isolation = READ-COMMITTED
#log-replica-updates=1
binlog_checksum=NONE
master_info_repository=TABLE
relay_log_info_repository=TABLE
#group_replication_member_expel_timeout=10
#group_replication_autorejoin_tries=10
transaction_write_set_extraction = XXHASH64
#replica_preserve_commit_order = ON
binlog_transaction_dependency_tracking = WRITESET
#replica_parallel_type=LOGICAL_CLOCK
#replica_parallel_workers=4
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=ON
disabled_storage_engines = MyISAM,BLACKHOLE,FEDERATED,CSV,ARCHIVE
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect='SET NAMES utf8mb4'
lower_case_table_names = 1
tmp_table_size = 512M
read_buffer_size = 32M
read_rnd_buffer_size = 64M
sort_buffer_size = 32M
join_buffer_size = 16M
thread_cache_size = 128
table_open_cache = 256
max_allowed_packet = 512M
binlog_cache_size = 1M
max_heap_table_size = 512M
key_buffer_size = 1024M
default-storage-engine = InnoDB
innodb_write_io_threads = 4
innodb_read_io_threads = 4
innodb_thread_concurrency = 0
innodb_purge_threads = 1
innodb_use_native_aio = 1
innodb_flush_log_at_trx_commit = 1
sync_binlog=1
innodb_log_buffer_size = 12M
innodb_log_file_size = 128M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 80
innodb_lock_wait_timeout = 120
interactive_timeout = 28800
wait_timeout = 28800
explicit_defaults_for_timestamp = true
innodb_io_capacity=200
innodb_data_file_path=ibdata1:1024M:autoextend
log_queries_not_using_indexes = 1
log_throttle_queries_not_using_indexes = 5
EOF

5、启动mysql修改默认密码并授权

## 初始化并后台启动
cd mysql/bin/
./mysqld --initialize --user=mysql --basedir=/data/mysql --datadir=/data/mysql/data
./mysqld_safe --defaults-file=/etc/my.cnf &

## 获取密码
grep 'password' /data/mysql/logs/mysql.log | awk 'print $NF'

## 登陆了mysql并修改命令
./mysql -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'hanweb@123';
update mysql.user set host='%' where user='root';
flush privileges;

## 创建集群所需授权
GRANT CLONE_ADMIN, CONNECTION_ADMIN, GROUP_REPLICATION_ADMIN, PERSIST_RO_VARIABLES_ADMIN, REPLICATION_APPLIER, REPLICATION_SLAVE_ADMIN, ROLE_ADMIN, SYSTEM_VARIABLES_ADMIN ON *.* TO 'root'@'%' WITH GRANT OPTION;

6、安装mysql­shell工具创建集群

rpm -ivh mysql-shell-8.0.28-1.el7.x86_64.rpm

## 从mysql1 上进入mysqlshell命令模式,
mysqlsh --uri root@mysql1:3306

## 创建集群
var cluster=dba.createCluster("MySQL_InnoDB_Cluster")

7、添加另外两台mysql节点,选项选择’C’

cluster.addInstance('root@mysql2:3306')
cluster.addInstance('root@mysql3:3306')

查看集群状态

cluster.status()

8、切换至多主模式

cluster.switchToMultiPrimaryMode()

9、配置mysql环境变量,加入到systemctl启动中,并设为开机自启

if ! grep /data/mysql /etc/profile
then
cat >> /etc/profile << EOF
export MYSQL_HOME=/data/mysql
export PATH="$PATH:$MYSQL_HOME/bin"
EOF
fi
source /etc/profile
#重启mysql并设置为开机自启动
if [ ! -e /etc/init.d/mysqld ]
then
cp -a /data/mysql/support-files/mysql.server /etc/init.d/mysqld
fi
#开机自启
chkconfig --add /etc/init.d/mysqld
chkconfig mysqld on

10、mysqlshell常用命令

1)查看集群状态

shell.connect('root@mysql1:3306')			#连接到实例
var cluster = dba.getCluster()					#定义集群信息
cluster.status();								#查看集群状态

2)配置命令

dba.getCluster();查看集群名
cluster.status();查看集群状态
dba.checkInstanceConfiguration(‘root@mysql1:3306’)检查节点状态是否正常
dba.configureLocalInstance();检查/etc/my.cnf是否正常
var cluster = dba.createCluster(‘myCluster’);创建一个名为myCluster的集群
dba.createCluster(‘st’);创建一个名字为st的集群
cluster.addInstance(‘root@oratest52:3306’);集群添加节点
cluster.switchToMultiPrimaryMode()切换多主模式

3)通用命令

命令别名/快捷方式描述
\\help\\h or ?打印有关MySQL Shell的帮助,或搜索联机帮助。
\\quit\\q or \\exit退出MySQL Shell。
\\在SQL模式下,开始多行模式。输入空行时缓存并执行代码。
\\status\\s显示当前的MySQL Shell状态。
\\js将执行模式切换为javascript
\\py将执行模式切换为Python。
\\sql将执行模式切换为SQL。
\\connect\\c连接到MySQL服务器。
\\reconnect重新连接到同一个MySQL服务器。
\\use\\u指定要使用的架构。
\\source.使用活动语言执行脚本文件。
\\warnings\\W显示语句生成的任何警告。
\\nowarnings\\w不要显示语句生成的任何警告。
\\history查看和编辑命令行历史记录。
\\rehash手动更新自动完成名称缓存。
\\option查询和更改MySQL Shell配置选项。
\\show使用提供的选项和参数运行指定的报告。
\\watch使用提供的选项和参数运行指定的报告,并定期刷新结果。

以上是关于mysql8集群部署的主要内容,如果未能解决你的问题,请参考以下文章

mysql8集群部署

docker部署nacos集群并配置mysql8

Docker 部署 MySql8.0 一主一从 高可用集群

后端 | 基于Docker部署MySQL8集群(一主二从)

docker 部署mysql8搭建innodb_cluster

Rancher部署Mysql8