Mysql8集群搭建

目录

1. 服务器介绍

2. 环境配置(建议先看一下第7章和第8章)

3. 重启4台服务器上的mysql

4. 主服务器数据库配置

5. 从服务器数据库配置

6. 验证是否配置成功

7. 解决Slave_IO_Running: No

8. 解决Slave_SQL_Running: No的问题

9. 进入数据库的方式

10. show slave status \G 各个参数解释


1. 服务器介绍

2. 环境配置(建议先看一下第7章和第8章)

2.1 在MySQL主服务器128配置文件my.cnf里面加入

# 启用二进制日志

log-bin=mysql-bin

#主服务器唯一ID
server-id=128
auto_increment_increment=2
auto_increment_offset=1 #不一样的点 相当于起始值
log-slave-updates
sync_binlog=1

# 设置不要复制的数据库 ( 可设置多个,这里仅是测试,就注释了 )
#binlog-ignore-db=mysql
#binlog-ignore-db=information_schema
# 设置需要复制的数据库
#binlog-do-db=需要复制的主数据库名字
#设置binlob模式
binlog_format=STATEMENT

2.2 在MySQL主服务器129配置文件my.cnf里面加入

#启用二进制日志

log-bin=mysql-bin

#主服务器唯一ID
server-id=129
auto_increment_increment=2
auto_increment_offset=2 #不一样的点 相当于起始值
log-slave-updates
sync_binlog=1

# 设置不要复制的数据库 ( 可设置多个,这里仅是测试,就注释了 )
#binlog-ignore-db=mysql
#binlog-ignore-db=information_schema
# 设置需要复制的数据库
#binlog-do-db=需要复制的主数据库名字
#设置binlob模式
binlog_format=STATEMENT

 2.3 在MySQL从服务器130配置文件my.cnf里面加入

server-id=130

2.4 在MySQL从服务器131配置文件my.cnf里面加入

server-id=131

 配置项说明

auto_increment_increment

控制主键自增的自增步长,用于防止 Master 与 Master 之间复制出现重复自增字段值,通常auto_increment_increment=n,有多少台主服务器,n 就设置为多少

auto_increment_offset=1

设置自增起始值,这里设置为1,这样 Master 的 auto_increment 字段产生的数值是:1, 3, 5, 7, …等奇数ID

注意 auto_increment_offset 的设置,不同的 master 设置不应该一样,否则就容易引起主键冲突,比如 master1 的 offset=1,则 master2 的 offset=2,master3的 offset=3

log-slave-updates

在双主模式中,log-slave-updates 配置项一定要配置,否则在master1(128)上进行了更新数据,在 master (129) 和 slave1 (130) 上会更新,但是在 slave2 (131) 上不会更新

sync_binlog

表示每几次事务提交,MySQL把binlog缓存刷进日志文件中,默认是0,最安全的是设置为1。sync_binlog=0,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。sync_binlog=n,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。

注意:

从库只开启 log-bin 功能,不添加 log-slave-updates 参数,从库从主库复制的数据不会写入log-bin日志文件里。

开启 log-slave-updates 参数后,从库从主库复制的数据会写入 log-bin 日志文件里。这也是该参数的功能。

直接向从库写入数据时,是会写入log-bin日志的。

在自动生成主键的时候,会在已生成主键的基础上按照规则生成,即比存在的值大

binlog_format
设置 logbin 格式,有一下三种模式

1. statement 模式
statement 模式记录的是 SQL 语句。
优点:日志量较小,占用空间小。执行速度快,因为只需要记录 SQL 语句即可。
缺点:对于使用了函数或随机数的 SQL 语句,可能会出现不一致的情况,比如随机数每次生成的都不一样。
因此,使用了函数或随机数的场景下,不建议使用 statement 模式。

2. row 模式
row 模式记录的是数据行的变化情况。
优点:对于使用了函数或随机数的 SQL 语句,不会出现不一致的情况。
缺点:日志量较大,占用空间较大。执行速度较慢,因为需要记录每一条数据的变化情况。

3. mixed 模式
mixed 模式是 statement 模式和 row 模式的混合模式,它能够根据具体的情况自动选择使用哪种模式。优点:能够根据具体情况自动选择使用最优的模式。
缺点:执行速度较慢,因为需要根据具体情况选择使用不同的模式。

3. 重启4台服务器上的mysql

systemctl restart mysql

4. 主服务器数据库配置

4.1 两台主服务器128、129进入mysql之后(mysql -uroot -p),开始创建用户:

mysql>CREATE USER 'copy'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

mysql>GRANT REPLICATION SLAVE ON *.* TO 'copy'@'%';

两台主服务器都要执行

4.2 重置两台主服务器状态

mysql>reset master;

4.3 查看两台主服务器状态

mysql>show master status;

4.4 如果之前设置过主从关系,也要重置一下(最好四台服务器都执行以下)

mysql>stop slave;

mysql>reset slave;

5. 从服务器数据库配置

5.1 为128主服务器数据库配置从关系(129、130这两台服务器相当于都是它的从服务器)

在129、130服务器上执行:

mysql>change master to master_host='192.168.164.128',master_user='copy',master_port=3306,master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=155;   

5.2 为129主服务器数据库配置从关系

在128、131上执行:

mysql>change master to master_host='192.168.164.129',master_user='copy',master_port=3306,master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=155;

5.3 在4台服务器上都执行以下命令

mysql>start slave;

6. 验证是否配置成功

7. 解决Slave_IO_Running: No

如果Slave_IO_Running: No,原因是从数据库的uuid相同了(其它三台服务器如果是直接克隆第一台服务器,然后配置主从数据库,一通操作,到最后启动数据库,会发现这个问题)

解决方法:

7.1 find / -iname "auto.cnf"

7.2 vi /usr/local/mysql-8.0/data/auto.cnf  (每个人的安装路径可能不同)

7.3 重启mysql

systemctl restart mysql

7.4 登录 mysql,重启slave,再次验证

mysql -uroot -p   登录mysql

mysql>stop slave;    停止链路

mysql>start slave;    启动链路

mysql>show slave status \G    查看链路

8. 解决Slave_SQL_Running: No的问题

 如果 Slave_SQL_Running: No ,那么执行以下步骤:

a. 先停掉slave

mysql> stop slave;

b. 跳过错误步数,后面步数可变

mysql> set global sql_slave_skip_counter=1;

c. 再启动slave

mysql> start slave;

d. 查看同步状态

mysql> show slave status \G

9. 进入数据库的方式

果我们使用 mysql -hhostname -uusername -ppassword -Pport 的方式进入数据,那么很可能会出现下面的提示信息,这是由于这种方式进入数据库会进行预读,如果数据量特别大就会容易卡住。

mysql> use han3;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

解决方式:

mysql -hhostname -uusername -ppassword -Pport -A的方式进入数据库, -A的意思就是不让数据库进行预读,这样打开数据库的速度就会快很多。

10. show slave status \G 各个参数解释

mysql> show slave status \G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.164.128 (指的是主服务器的地址。 )

Master_User: copy   (指的是主服务器上用来复制的用户。从服务器会用此账号来登录主服务。进行复制。)

Master_Port: 3306  (主服务器上数据库的端口号)

Connect_Retry: 60   (–master-connect-retry选项的当前值,连接重试时间)

Master_Log_File: mysql-bin.000001  (I/O线程当前正在读取的主服务器二进制日志文件的名称)

Read_Master_Log_Pos: 3384   (在当前的主服务器二进制日志中,I/O线程已经读取的位置)

Relay_Log_File: node-3-relay-bin.000003  (SQL线程当前正在读取和执行的中继日志文件的名称。)

Relay_Log_Pos: 2200  (在当前的中继日志中,SQL线程已读取和执行的位置)

Relay_Master_Log_File: mysql-bin.000001  (由SQL线程执行的包含多数近期事件的主服务器二进制日志文件的名称)

Slave_IO_Running: Yes  (I/O线程是否被启动并成功地连接到主服务器上)

Slave_SQL_Running: Yes  (SQL线程是否被启动)

Replicate_Do_DB:      (搭建主从复制时使用–replicate-do-db和–replicate-ignore-db选项指定的数据库清单)

Replicate_Ignore_DB:      (同上)

Replicate_Do_Table:      (使用–replicate-do-table,–replicate-ignore-table,–replicate-wild-do-table和–replicate-wild-ignore_table选项指定的表清单)

Replicate_Ignore_Table:      (同上)

Replicate_Wild_Do_Table:      (同上)

Replicate_Wild_Ignore_Table:      (同上)

Last_Errno: 0

 Last_Error:       (被多数最近被执行的查询返回的错误数量和错误消息。错误数量为0并且消息为空字符串意味着“没有错误”。如果Last_Error值不是空值,它也会在从服务器的错误日志中作为消息显示)

Skip_Counter: 0     (最近被使用的用于SQL_SLAVE_SKIP_COUNTER的值)

Exec_Master_Log_Pos: 3384   (表示SQL线程已经执行的Relay log相对于主库二进制日志偏移量的位置,一般gtid复制出错使用该项去主库中查询)

Relay_Log_Space: 3927   (表示所有原有的中继日志结合起来的总大小)

Until_Condition: None   (如果没有指定UNTIL子句,则没有值。如果从属服务器正在读取,直到达到主服务器的二进制日志的给定位置为止,则值为Master,如果从属服务器正在读取,直到达到其中继日志的给定位置为止,则值为Relay)

Until_Log_File:

Until_Log_Pos: 0      (Until_Log_File和Until_Log_Pos用于指示日志文件名和位置值,日志文件名和位置值定义了SQL线程在哪个点中止执行)

Master_SSL_Allowed: No     (显示了从服务器是否使用SSL连接到主服务器。如果允许对主服务器进行SSL连接,则值为Yes;如果不允许对主服务器进行SSL连接,则值为No;如果允许SSL连接,但是从服务器没有让SSL支持被启用,则值为Ignored)

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:        (如果Slave使用SSL连接Master服务器,这里就会显示对应的证书和私钥信息。使用CHANGE MASTER与SSL相关的选项有:–master-ca,–master-capath,–master-cert,–master-cipher和–master-key等)

Seconds_Behind_Master: 0      (表示主从之间延迟的时间,单位是秒。就是SQL线程当前执行的binlog(实际上是relay log)中的timestamp和IO线程最新的timestamp的差值。

                               实质上,此字段计算Slave SQL线程和Slave i/o线程之间的时间差 (以秒为单位)。如果主节点和从服务器之间的网络连接速度较快,则Slave i/o线程非常接近主服务器,

   因此此字段是对从SQL线程与主服务器进行比较的后的一个很好的近似值。如果网络很慢,这不是一个好的近似;从SQL线程可能经常被从i/o线程所捕获,

   因此Seconds_Behind_Master通常显示值为0,即使i/o线程比主服务器慢很多。换言之,此列仅适用于快速网络)

Master_SSL_Verify_Server_Cert: No     (显示是否认证Master证书)

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:        (类似last_error,在出现IO线程错误和SQL线程错误的时候会有值)

Replicate_Ignore_Server_Ids:        (slave当前会跳过的事件号)

Master_Server_Id: 128    (显示主服务器的Server_id)

Master_UUID: e6c0141a-c705-11ed-9acc-000c290cc524    (记录Master的UUID)

Master_Info_File: mysql.slave_master_info     (记录Master info信息的存储位置)

SQL_Delay: 0     (记录Slave设置延迟复制的时间,0表示无延迟,主动延迟复制在某些情况下有助于恢复)

SQL_Remaining_Delay: NULL   (当 Slave_SQL_Running_State 等待,直到MASTER_DELAY秒后,Master执行的事件, 此字段包含一个整数,表示有多少秒左右的延迟。在其他时候,这个字段是0)

Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates    (记录SQL线程的状态。常见的三种状态如下)

Master_Retry_Count: 86400

Master_Bind:

Last_IO_Error_Timestamp:      (记录最近IO线程错误的时间戳)

Last_SQL_Error_Timestamp:      (记录最近SQL线程错误的时间戳)

Master_SSL_Crl:

Master_SSL_Crlpath:

Retrieved_Gtid_Set:      (接收的二进制日志集合,对应IO线程)

Executed_Gtid_Set:      (执行的二进制日志集合,对应SQL线程)

Auto_Position: 0    (记录在GTID模式下是否开启了自动事务校验)

Replicate_Rewrite_DB:

Channel_Name:      (在多源复制下(5.7支持),复制通道的名称,可以有多个)

Master_TLS_Version:

Master_public_key_path:

Get_master_public_key: 0

Network_Namespace:

1 row in set (0.00 sec)

参考文章:

MySQL 集群 (三) ---------- 一主多从环境搭建_mysql一主多从搭建_在森林中麋了鹿的博客-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
搭建MySQL 8集群的过程比较复杂,以下是大致的步骤: 1. 安装MySQL 8版本:首先在每个节点上安装MySQL 8,可以通过官方网站下载适合你操作系统的安装包,并按照指导进行安装。 2. 配置主节点:选择其中一个节点作为主节点,编辑主节点的配置文件my.cnf,在[mysqld]部分添加以下配置: ``` server-id=1 log-bin=mysql-bin binlog-format=row ``` 3. 配置从节点:对于其他节点,同样要编辑配置文件my.cnf,在[mysqld]部分添加以下配置: ``` server-id=2 relay-log=mysql-relay-bin log-slave-updates=1 read-only=1 ``` 4. 启动主节点:启动主节点并执行以下命令: ``` CREATE USER 'repl'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES; FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS; ``` 记录下显示的File和Position值,它们在配置从节点时会用到。 5. 启动从节点:启动其他节点,并执行以下命令: ``` CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='filename_from_master', MASTER_LOG_POS=position_from_master; ``` 将`master_ip`替换为主节点的IP地址,`filename_from_master`和`position_from_master`分别替换为主节点上显示的File和Position值。 6. 启动从节点的复制:在从节点执行以下命令启动复制: ``` START SLAVE; ``` 7. 验证集群:可以通过在主节点上创建或修改数据,在从节点上查看是否同步成功来验证集群是否正常工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值