导航
- Mysql8.0 集群部署, 主从互备
- 环境准备
- 安装
- 数据库主从配置
Mysql8.0 集群部署, 主从互备
环境准备
- 两台虚拟机(10.10.1.1 , 10.10.1.2)
- Mysql安装包 mysql-8.0.20-linux-glibc2.12-x86_64.tar
Mysql安装包下载地址: 官网地址
安装
- 解压
tar -xvf mysql-8.0.20-linux-glibc2.12-x86_64.tar
- 重命名
mv mysql-8.0.20-linux-glibc2.12-x86_64 mysql8
- 移动
mv mysql8 /usr/local
- 创建mysql数据存储文件
cd /usr/local/mysql8
mkdir data
- 创建mysql用户组和mysql用户
groupadd mysql
useradd -g mysql mysql
- 改变msql8目录权限
chown -R mysql.mysql /usr/local/mysql8/
- 初始化数据库
bin/mysqld --initialize --user=mysql --lower-case-table-names=1 --basedir=/usr/local/mysql8 --datadir=/usr/local/mysql8/data
- 记录初始密码
A temporary password is generated for root@localhost: [密码]
- 在var/log中创建并赋权mysql日志文件夹、创建tmpdir文件夹并赋权
mkdir /var/log/mysql8
chown -R mysql.mysql /var/log/mysql8
touch /var/log/mysql8/mariadb.log
chown -R mysql.mysql /var/log/mysql8/mariadb.log
chmod 777 /var/log/mysql8/mariadb.log
mkdir /var/log/mysql8/run
chown -R mysql.mysql /var/log/mysql8/run
mkdir /tmp/mysql8
chown -R mysql.mysql /tmp/mysql8
mkdir /tmp/mysql8/tmp
chown -R mysql:mysql /tmp/mysql8/tmp
- 修改配置 vi /etc/my.cnf
[mysqld_safe]
log-error=/var/log/mysql8.0/mariadb.log
pid-file=/var/log/mysql8.0/run/mysqld.pid
[client]
socket=/tmp/mysql8.0/mysql.sock
default-character-set=utf8
[mysqld]
port=3306
user=mysql
basedir=/usr/local/mysql8.0
tmpdir=/tmp/mysql8.0/tmp
datadir=/usr/local/mysql8.0/data
socket=/tmp/mysql8.0/mysql.sock
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
#设置页大小
innodb_page_size=16384
#关闭ssl
ssl=0
lower_case_table_names = 1
#设置最大连接数
max_connections=2000
#设置会话请求缓存个数
back_log=2048
#关闭性能模式
performance_schema=OFF
max_prepared_stmt_count=128000
#服务器或客户端之间进行传输大小
max_allowed_packet=128M
#file
#设置每个表一个文件
innodb_file_per_table
#设置logfile大小 1500M
innodb_log_file_size=150M
#设置logfile组个数
innodb_log_files_in_group=32
#设置最大打开表个数
innodb_open_files=4000
#buffers
#设置buffer pool size,一般为服务器内存60%
innodb_buffer_pool_size=251M
#设置buffer pool instance个数,提高并发能力
innodb_buffer_pool_instances=16
#设置log buffer size大小
innodb_log_buffer_size=64M
#tune
#设置每次sync_binlog事务提交刷盘
sync_binlog=1
#每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去
innodb_flush_log_at_trx_commit=1
#开启异步IO
innodb_use_native_aio=1
#设置spin_wait_delay 参数,防止进入系统自旋
innodb_spin_wait_delay=180
#设置spin_loops 循环次数,防止进入系统自旋
innodb_sync_spin_loops=25
#设置innodb数据文件及redo log的打开、刷写模式
innodb_flush_method=O_DIRECT
# 设置innodb 后台线程每秒最大iops上限
innodb_io_capacity=20000
#设置压力下innodb 后台线程每秒最大iops上限
innodb_io_capacity_max=40000
#设置page cleaner线程每次刷脏页的数量
innodb_lru_scan_depth=9000
#设置将脏数据写入到磁盘的线程数
innodb_page_cleaners=16
#perf special
#检测该页所在区(extent)的所有页,如果是脏页,那么一起进行刷新,SSD关闭该功能
innodb_flush_neighbors=0
#设置写线程数
innodb_write_io_threads=16
#设置读线程数
innodb_read_io_threads=16
#设置回收已经使用并分配的undo页线程数
innodb_purge_threads=32
sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_AUTO_VALUE_ON_ZERO, STRICT_ALL_TABLES
- 拷贝mysql启动文件到系统初始化目录
cp /usr/local/mysql8/support-files/mysql.server /etc/init.d/mysqld
- 启动mysql 服务器
service mysqld start
- 连接mysql
/usr/local/mysql8/bin/mysql -u root -p
- 首先查看当前root用户相关信息,在mysql数据库的user表中
use mysql;
select host, user, authentication_string, plugin from user;
- 使用ALTER修改root用户密码
ALTER user 'root'@'localhost' IDENTIFIED BY 'root';
- 修改root用户可以远程连接
update mysql.user set host='%' where user='root';
数据库主从配置
- 安装好两个服务器的数据库后, 修改配置
- 修改主服务器配置
vim /etc/my.cnf
- 修改内容在最下面增加
server-id = 1 #主库id
innodb_flush_log_at_trx_commit = 2 #提交事务的时候将 redo 日志写入磁盘中
log-bin=mysql-bin # bin日志名称
sync-binlog=1 #使执行1次写入后,与硬盘同步
binlog-do-db=gcl_hr #主数据库名称(这里替换成你的数据库名字)
binlog-ignore-db = mysql #忽略以下库的同步
binlog-ignore-db = performance_schema #忽略以下库的同步
binlog-ignore-db = information_schema #忽略以下库的同步
log_slave_updates=true
auto-increment-increment = 2 #字段变化增量值
auto-increment-offset = 1 #初始字段ID为1
relay-log = relay-log #副本日志名称
# 指定日志格式 有mixed|row|statement 推荐mixed
binlog-format=mixed
- 重启服务 查看 master 的状态, 记录master信息
#重启服务器
service mysqld restart
#进入mysql
/usr/local/mysql8/bin/mysql -u root -p
#查看master状态
show master status;
- 创建用于复制操作的用户(@后的是从机的IP地址)
CREATE USER 'repl'@'10.10.1.2' IDENTIFIED WITH mysql_native_password BY 'repl';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.2.7';
flush privileges;
- 修改从服务器配置
vim /etc/my.cnf
- 修改内容在最下面增加(server-id不能重复, 其他一样)
server-id = 2 #从库id, 与主库区分
innodb_flush_log_at_trx_commit = 2 #提交事务的时候将 redo 日志写入磁盘中
log-bin=mysql-bin # bin日志名称
sync-binlog=1 #使执行1次写入后,与硬盘同步
binlog-do-db=gcl_hr #主数据库名称(这里替换成你的数据库名字)
binlog-ignore-db = mysql #忽略以下库的同步
binlog-ignore-db = performance_schema #忽略以下库的同步
binlog-ignore-db = information_schema #忽略以下库的同步
log_slave_updates=true
auto-increment-increment = 2 #字段变化增量值
auto-increment-offset = 1 #初始字段ID为1
relay-log = relay-log #副本日志名称
# 指定日志格式 有mixed|row|statement 推荐mixed
binlog-format=mixed
- 再从(Slave)节点上设置主节点参数
//MASTER_HOST: 主机IP
//MASTER_USER,MASTER_PASSWORD: 主机创建的用于复制的用户
//MASTER_LOG_FILE,MASTER_LOG_POS: 主机查看master状态的file文件名和position
CHANGE MASTER TO MASTER_HOST='10.10.1.1', MASTER_USER='repl', MASTER_PASSWORD='repl', MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=856;
- 开启主从同步
start slave;
- 查看主从同步状态
show slave status\G;
- 主从互备: 调换主备重复4,5,8,9,10步骤(配置文件不用修改)