mysql8.0以后的版本,进行多主一从的集群环境搭建

写在前面:
网上充满了关于mysql多主一从的环境搭建,但是大多关于mysql5.6左右的版本,版本较低,最近在使用mysql8.0的时候,发现很多命令已经过时了,不再适用8.0以后的版本,一如之前修改root密码,常用的授权语句均不在适用,今天在搭建多主一从的时候,发现了同样的问题,随记录下来,防止遗忘

一、思路:

顾名思义,多主一从,具有多台master主机,只有一台slave主机
也就是只用一台slave主机来备份多台master主机的数据库数据
方法:两台master主机均开启bin-log日志,添加不同的server-id号,均授权replicate slave权限
具体可以参考之前的一主一从的搭建过程,有详细记录
slave主机,需要修改MySQL配置文件,开启Multi功能支持多线程MySQL运行

二、配置:

两台master配置不在赘述,可以参考
https://blog.51cto.com/ahcwy/1940177
着重介绍,mysql8.0以后slave与以往的不同
配置文件:开启Multi功能支持多线程MySQL运行,添加两个线程的数据库不同端口号,数据库数据的存放目录,datadir、pid-file、socket两个线程的配置均在不同目录下mysqla和mysqlb里面,服务器的server-id要一样

[root@localhost etc]# cat my.cnf
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove the leading "# " to disable binary logging
# Binary logging captures changes between backups and is enabled by
# default. It's default setting is log_bin=binlog
# disable_log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
#
# Remove leading # to revert to previous value for default_authentication_plugin,
# this will increase compatibility with older clients. For background, see:
# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin
# default-authentication-plugin=mysql_native_password

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[mysqld_muliti]

mysqld=/usr/bin/mysqld_safe

mysqladmin=/usr/bin/mysqladmin

user=root

password=123456

[mysqld178]

port=3306

datadir=/var/lib/mysqla

pid-file=/var/lib/mysqla/mysqld.pid

socket=/var/lib/mysqla/mysql.sock

user=mysql

server-id=3

[mysqld179]

port=3307

datadir=/var/lib/mysqlb

pid-file=/var/lib/mysqlb/mysqld.pid

socket=/var/lib/mysqlb/mysql.sock

user=mysql

server-id=3

借图一用,进行解释:
mysql8.0以后的版本,进行多主一从的集群环境搭建_第1张图片
配置完了,需要初始化数据库,生成目录mysqla和mysqlb
重点来了,下面的语句不再生效,已经不识别了 mysql_install_db ,已经在/usr/bin/下面找不到该命令了
mysql8.0以后的版本,进行多主一从的集群环境搭建_第2张图片
最新8.0已经改为了 mysqld --initialize命令,效果如下:

[root@localhost etc]# mysqld --initialize --datadir=/var/lib/mysqla --user=mysql
[root@localhost etc]# mysqld --initialize --datadir=/var/lib/mysqlb --user=mysql

[root@localhost etc]# cd /var/lib/mysqla/
[root@localhost mysqla]# ll
total 155712
-rw-r-----. 1 root root       56 Jun 16 06:57 auto.cnf
-rw-------. 1 root root     1676 Jun 16 06:57 ca-key.pem
-rw-r--r--. 1 root root     1112 Jun 16 06:57 ca.pem
-rw-r--r--. 1 root root     1112 Jun 16 06:57 client-cert.pem
-rw-------. 1 root root     1676 Jun 16 06:57 client-key.pem
-rw-r-----. 1 root root     5750 Jun 16 06:57 ib_buffer_pool
-rw-r-----. 1 root root 12582912 Jun 16 06:57 ibdata1
-rw-r-----. 1 root root 50331648 Jun 16 06:57 ib_logfile0
-rw-r-----. 1 root root 50331648 Jun 16 06:57 ib_logfile1
drwxr-x---. 2 root root     4096 Jun 16 06:57 #innodb_temp
drwxr-x---. 2 root root     4096 Jun 16 06:57 mysql
-rw-r-----. 1 root root 25165824 Jun 16 06:57 mysql.ibd
drwxr-x---. 2 root root     4096 Jun 16 06:57 performance_schema
-rw-------. 1 root root     1680 Jun 16 06:57 private_key.pem
-rw-r--r--. 1 root root      452 Jun 16 06:57 public_key.pem
-rw-r--r--. 1 root root     1112 Jun 16 06:57 server-cert.pem
-rw-------. 1 root root     1680 Jun 16 06:57 server-key.pem
drwxr-x---. 2 root root     4096 Jun 16 06:57 sys
-rw-r-----. 1 root root 10485760 Jun 16 06:57 undo_001
-rw-r-----. 1 root root 10485760 Jun 16 06:57 undo_002
[root@localhost mysqla]# 
[root@localhost mysqla]# cd /var/lib/mysqlb/
[root@localhost mysqlb]# ll
total 155712
-rw-r-----. 1 mysql mysql       56 Jun 16 06:58 auto.cnf
-rw-------. 1 mysql mysql     1676 Jun 16 06:58 ca-key.pem
-rw-r--r--. 1 mysql mysql     1112 Jun 16 06:58 ca.pem
-rw-r--r--. 1 mysql mysql     1112 Jun 16 06:58 client-cert.pem
-rw-------. 1 mysql mysql     1676 Jun 16 06:58 client-key.pem
-rw-r-----. 1 mysql mysql     5750 Jun 16 06:58 ib_buffer_pool
-rw-r-----. 1 mysql mysql 12582912 Jun 16 06:58 ibdata1
-rw-r-----. 1 mysql mysql 50331648 Jun 16 06:58 ib_logfile0
-rw-r-----. 1 mysql mysql 50331648 Jun 16 06:58 ib_logfile1
drwxr-x---. 2 mysql mysql     4096 Jun 16 06:58 #innodb_temp
drwxr-x---. 2 mysql mysql     4096 Jun 16 06:58 mysql
-rw-r-----. 1 mysql mysql 25165824 Jun 16 06:58 mysql.ibd
drwxr-x---. 2 mysql mysql     4096 Jun 16 06:58 performance_schema
-rw-------. 1 mysql mysql     1680 Jun 16 06:58 private_key.pem
-rw-r--r--. 1 mysql mysql      452 Jun 16 06:58 public_key.pem
-rw-r--r--. 1 mysql mysql     1112 Jun 16 06:58 server-cert.pem
-rw-------. 1 mysql mysql     1676 Jun 16 06:58 server-key.pem
drwxr-x---. 2 mysql mysql     4096 Jun 16 06:58 sys
-rw-r-----. 1 mysql mysql 10485760 Jun 16 06:58 undo_001
-rw-r-----. 1 mysql mysql 10485760 Jun 16 06:58 undo_002

改变mysqla和mysqlb目录及以下的文件属主为mysql(防止出现权限问题)

[root@localhost lib]# chown -R mysql:mysql mysqla

启动服务:(1,2是两台master主机的server-id号)

[root@localhost lib]# mysqld_multi --defaults-file=/etc/my.cnf start 1 
[root@localhost lib]# mysqld_multi --defaults-file=/etc/my.cnf start 2

查看端口,观察服务是否启动成功

你可能感兴趣的:(mysql)