社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
写在前面:
网上充满了关于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
借图一用,进行解释:
配置完了,需要初始化数据库,生成目录mysqla和mysqlb
重点来了,下面的语句不再生效,已经不识别了 mysql_install_db ,已经在/usr/bin/下面找不到该命令了
最新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
查看端口,观察服务是否启动成功
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!