导航

  • Mysql8.0 集群部署, 主从互备
  • 环境准备
  • 安装
  • 数据库主从配置


Mysql8.0 集群部署, 主从互备

环境准备

  1. 两台虚拟机(10.10.1.1 , 10.10.1.2)
  2. Mysql安装包 mysql-8.0.20-linux-glibc2.12-x86_64.tar
    Mysql安装包下载地址: 官网地址

安装

  1. 解压
tar -xvf mysql-8.0.20-linux-glibc2.12-x86_64.tar
  1. 重命名
mv mysql-8.0.20-linux-glibc2.12-x86_64 mysql8
  1. 移动
mv mysql8 /usr/local
  1. 创建mysql数据存储文件
cd /usr/local/mysql8
mkdir data
  1. 创建mysql用户组和mysql用户
groupadd mysql  
useradd -g mysql mysql
  1. 改变msql8目录权限
chown -R mysql.mysql /usr/local/mysql8/
  1. 初始化数据库
bin/mysqld --initialize --user=mysql --lower-case-table-names=1  --basedir=/usr/local/mysql8 --datadir=/usr/local/mysql8/data
  1. 记录初始密码
A temporary password is generated for root@localhost: [密码]
  1. 在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
  1. 修改配置 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
  1. 拷贝mysql启动文件到系统初始化目录
cp /usr/local/mysql8/support-files/mysql.server /etc/init.d/mysqld
  1. 启动mysql 服务器
service mysqld start
  1. 连接mysql
/usr/local/mysql8/bin/mysql -u root -p
  1. 首先查看当前root用户相关信息,在mysql数据库的user表中
use mysql;
select host, user, authentication_string, plugin from user;
  1. 使用ALTER修改root用户密码
ALTER user 'root'@'localhost' IDENTIFIED BY 'root';
  1. 修改root用户可以远程连接
update mysql.user set host='%' where user='root';

数据库主从配置

  1. 安装好两个服务器的数据库后, 修改配置
  2. 修改主服务器配置
vim /etc/my.cnf
  1. 修改内容在最下面增加
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
  1. 重启服务 查看 master 的状态, 记录master信息
#重启服务器
service mysqld restart
#进入mysql
/usr/local/mysql8/bin/mysql -u root -p 
#查看master状态
show master status;
  1. 创建用于复制操作的用户(@后的是从机的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;
  1. 修改从服务器配置
vim /etc/my.cnf
  1. 修改内容在最下面增加(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
  1. 再从(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;
  1. 开启主从同步
start slave;
  1. 查看主从同步状态
show slave status\G;
  1. 主从互备: 调换主备重复4,5,8,9,10步骤(配置文件不用修改)