可用性级别(指标) | 年度宕机时间 | 描述 | 叫法 |
---|---|---|---|
99% | 3.65天/年 | 基本可用系统 | 2个9 |
99.9% | 8.76小时/年 | 可用系统 | 3个9 |
99.99% | 52.6分钟/年 | 高可用系统 | 4个9 |
99.999% | 5.3分钟/年 | 抗故障系统 | 5个9 |
99.9999% | 32秒/年 | 容错系统 | 6个9 |
计算方法:
1年 = 365天 = 8760小时
99 8760 * 1% = 8760 * 0.01 = 87.6小时=3.65天
99.9 8760 * 0.1% = 8760 * 0.001 = 8.76小时
99.99 8760 * 0.01% = 0.876小时 = 0.876 * 60 = 52.6分钟
99.999 8760 * 0.001% = 0.0876小时 = 0.0876 * 60 = 5.26分钟
Replication可以实现将数据从一台数据库服务器(master)复制到一台到多台数据库服务器(slave)。默认情况下,属于异步复制,所以无需维持长连接
master(主服务器)将数据库的改变写入二进制日志,slave(从服务器)同步这些二进制日志,并根据这些二进制日志进行数据重演操作,实现数据异步同步
具体过程
中继日志的开启:
在mysql的配置文件中添加relay-log字段,并指定路径和文件名,如:
relay-log=/mysql_3306/data/relaylog
理论上,两台master好像都能接受读、写请求,但实际上,往往运作的过程中,同一时刻只有其中一台master会接受写请求,另外一台接受读请求
IP地址 | 主机名 |
---|---|
192.168.226.20 | master |
192,168.226.30 | Slave |
[root@server2 ~]# hostnamectl set-hostname master
[root@server2 ~]# su
[root@server3 ~]# hostnamectl set-hostname slave
[root@server3 ~]# su
#防止NetworkManager对静态ip及高可用软件产生影响
systemctl stop NetworkManager
systemctl disable NetworkManager
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
cat >> /etc/hosts <.168.226.20 master
192.168.226.30 slave
EOF
ntpdate cn.ntp.org.cn
#向xshell中传入mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz软件包
yum install -y lrzsz
rz
ls
tar -xzf mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz
选项 | 采用默认形式 |
---|---|
安装路径 | /usr/local/mysql |
数据路径 | /usr/local/mysql/data |
端口号 | 3306 |
安装
[root@master ~]# vim mysql.sh
#!/bin/bash
#Desc='此脚本用于安装MySQL软件'
#Usage=source mysql.sh
yum install -y libaio
rm -rf /usr/local/mysql
mv mysql-5.7.31-linux-glibc2.12-x86_64 /usr/local/mysql
useradd -r -s /sbin/nologin mysql
rm -rf /etc/my.cnf
cd /usr/local/mysql
mkdir mysql-files
chown mysql:mysql mysql-files
chmod 750 mysql-files
bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql &> /root/password.txt
bin/mysql_ssl_rsa_setup --datadir=/usr/local/mysql/data
cp support-files/mysql.server /etc/init.d/mysqld
service mysqld start
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
source /etc/profile
[root@master ~]# source mysql.sh
#脚本中含有source命令,调用脚本时也需要使用source 调用
查看随机密码
[root@master ~]# cat /root/password.txt |grep password
2021-09-28T06:41:36.468051Z 1 [Note] A temporary password is generated for root@localhost: 3KkY)iSsSJo7
安全配置
[root@master ~]# mysql_secure_installation
#顺便更改密码
Enter password for user root: #产生的随机密码
The existing password for the user account root has expired. Please set a new password.
New password: #新密码123
Re-enter new password: #123
配置my.cnf文件
[root@master ~]# cd /usr/local/mysql/
[root@master mysql]# vim my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
port=3306
log-error=/usr/local/mysql/data/mysql.err
log-bin=/usr/local/mysql/data/binlog
server-id=20
character_set_server=utf8mb4
[root@master mysql]# service mysqld restart
相对于主服务器MySQL的安装与配置,从服务器端不需要进行初始化操作,因为其数据将来都来自于主服务器
安装
[root@slave ~]# vim mysql.sh
#!/bin/bash
#Desc='此脚本用于slave上安装MySQL软件'
#Usage=source mysql.sh
yum install -y libaio
rm -rf /usr/local/mysql
mv mysql-5.7.31-linux-glibc2.12-x86_64 /usr/local/mysql
useradd -r -s /sbin/nologin mysql
rm -rf /etc/my.cnf
cd /usr/local/mysql
mkdir mysql-files
chown mysql:mysql mysql-files
chmod 750 mysql-files
#bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql &> /root/password.txt
#bin/mysql_ssl_rsa_setup --datadir=/usr/local/mysql/data
cp support-files/mysql.server /etc/init.d/mysqld
#service mysqld start
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
source /etc/profile
[root@slave ~]# source mysql.sh
配置my.cnf文件
[root@slave mysql]# cd /usr/local/mysql/
[root@slave mysql]# vim my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
port=3306
log-error=/usr/local/mysql/data/mysql.err
#log-bin=/usr/local/mysql/data/binlog
relay-log=/usr/local/mysql/data/relaylog
server-id=30
character_set_server=utf8mb4
把master主服务器的数据目录同步到slave从服务器
#停止master的mysql
[root@master ~]# service mysqld stop
#删除master的/usr/local/mysql/data下的auto.cnf文件,该文件随安装mysql产生,记录了一个具有唯一性编号
[root@master ~]# rm -rf /usr/local/mysql/data/auto.cnf
#拷贝数据目录
yum install -y rsync.x86_64
[root@master ~]# rsync -av /usr/local/mysql/data [email protected]:/usr/local/mysql/
启动mysql
service mysqld start
[root@slave mysql]# mysql -uroot -p123
在master上创建专门用于主从复制的账号
[root@master ~]# mysql -uroot -p123
mysql> create user 'slave'@'192.168.226.%' identified by '123';
mysql> grant replication slave on *.* to 'slave'@'192.168.226.%';
mysql> flush privileges;
在master上锁表
mysql> flush tables with read lock;
在master中查看二进制文件的名称及位置
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000002 | 773 | | | |
+---------------+----------+--------------+------------------+-------------------+
mysql> show master status\G
*************************** 1. row ***************************
File: binlog.000002
Position: 773
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
在slave从服务器中,使用change master to指定主服务器,实现数据同步
[root@slave mysql]# mysql -uroot -p123
mysql> change master to
master_host='192.168.226.20',
master_user='slave',
master_password='123',
master_port=3306,
master_log_file='binlog.000002',
master_log_pos=773;
启动slave数据同步
mysql> start slave;
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.226.20
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: binlog.000002
Read_Master_Log_Pos: 773
Relay_Log_File: relaylog.000002
Relay_Log_Pos: 317
Relay_Master_Log_File: binlog.000002
Slave_IO_Running: Yes #为Yes
Slave_SQL_Running: Yes #为Yes,两者均为Yes说明启动成功
给master解锁
mysql> unlock tables;
change master to语句写错,解决方法:
mysql> stop slave; mysql> reset slave; mysql> change master to master_host='192.168.226.20', master_user='slave', master_password='123', master_port=3306, master_log_file='binlog.000002', master_log_pos=773; mysql> start slave;
在master端准备数据
mysql> create database db1;
mysql> use db1;
mysql> create table department(
id int,
name varchar(20)
);
mysql> insert into department values
(200,'技术'),
(201,'人力资源'),
(202,'销售'),
(203,'运营');
mysql> select * from department;
+------+--------------+
| id | name |
+------+--------------+
| 200 | 技术 |
| 201 | 人力资源 |
| 202 | 销售 |
| 203 | 运营 |
+------+--------------+
在slave端查看
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| db1 |
| mysql |
| performance_schema |
| sys |
+--------------------+
mysql> select * from db1.department;
+------+--------------+
| id | name |
+------+--------------+
| 200 | 技术 |
| 201 | 人力资源 |
| 202 | 销售 |
| 203 | 运营 |
+------+--------------+
mysql> show slave status\G
可以通过变量sql_slave_skip_counter临时跳过N条事务进行处理
mysql> SET GLOBAL sql_slave_skip_counter=1;
mysql> stop slave;
mysql> start slave;
[root@master ~]# service mysqld restart
#slave端
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 192.168.226.20
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: binlog.000005
Read_Master_Log_Pos: 1218
Relay_Log_File: relaylog.000004
Relay_Log_Pos: 573
Relay_Master_Log_File: binlog.000005
Slave_IO_Running: No
Slave_SQL_Running: No
开启slave
mysql> start slave;
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.226.20
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: binlog.000006
Read_Master_Log_Pos: 234
Relay_Log_File: relaylog.000008
Relay_Log_Pos: 401
Relay_Master_Log_File: binlog.000006
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
GTIDs(Global transaction identifiers)全局事务标识符
基于mysql 5.6及以上版本
当使用GTIDs时,每一个事务(增删改)都可以通过被给定唯一的编号被识别并跟踪
添加新的slave或者当发生故障需要将master身份或者角色迁移到slave上时,都无需考虑是哪一个二进制日志以及哪个position值,极大简化了相关操作
GTIDs基于事务,不支持MYISAM存储引擎
GTID由source_id和transaction_id组成:
source_id来自于server_uuid,可以在auto.cnf中看到
transation_id是一个序列数字,自动生成
修改master和slave的配置文件,让其支持GTIDs
[root@master ~]# cd /usr/local/mysql/
[root@master mysql]# cat >> my.cnf <
gtid-mode=on
log-slave-updates=1
enforce-gtid-consistency
EOF
[root@slave mysql]# rm -rf data/binlog.*
[root@slave mysql]# cat >> my.cnf <
gtid-mode=on
log-slave-updates=1
enforce-gtid-consistency
skip-slave-start
log-bin=/usr/local/mysql/data/binlog
EOF
#skip-slave-start:当master主服务器GTIDs没有启动时,跳过slave服务器的启动
#log-bin:基于GTIDs复制从服务器必须开启二进制日志
重启mysqld服务
service mysqld restart
主从配置只读模式
mysql -uroot -p123
mysql> set @@global.read_only=ON;
在slave重新配置change master to
mysql> stop slave;
mysql> reset slave;
mysql> change master to
master_host='192.168.226.20',
master_user='slave',
master_password='123',
master_port=3306,
master_auto_position=1;
mysql> start slave;
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.226.20
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: binlog.000003
Read_Master_Log_Pos: 154
Relay_Log_File: relaylog.000002
Relay_Log_Pos: 361
Relay_Master_Log_File: binlog.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
在master和slave上关闭主从配置只读模式
mysql> @@global.read_only=OFF;
测试验证
#准备数据
mysql> create table tb1(
create table tb1(
id int not null auto_increment,
name varchar(20),
primary key(id)
);
mysql> insert into db1.tb1 values(null,'aaa');
mysql> insert into db1.tb1 values(null,'bbb');
mysql> select * from tb1;
+----+------+
| id | name |
+----+------+
| 1 | aaa |
| 2 | bbb |
+----+------+
从服务器端验证
mysql> select * from db1.tb1;
+----+------+
| id | name |
+----+------+
| 1 | aaa |
| 2 | bbb |
+----+------+
模拟slave从服务写入数据
mysql> insert into db1.tb1 values(null,'ccc');
mysql> select * from db1.tb1;
+----+------+
| id | name |
+----+------+
| 1 | aaa |
| 2 | bbb |
| 3 | ccc |
+----+------+
#在master端再次插入该数据
mysql> insert into db1.tb1 values(null,'ccc');
mysql> select * from tb1;
+----+------+
| id | name |
+----+------+
| 1 | aaa |
| 2 | bbb |
| 3 | ccc |
+----+------+
#slave端查看
mysql> select * from db1.tb1;
+----+------+
| id | name |
+----+------+
| 1 | aaa |
| 2 | bbb |
| 3 | ccc |
+----+------+
#再向master插入数据
mysql> insert into db1.tb1 values(null,'ddd');
mysql> select * from tb1;
+----+------+
| id | name |
+----+------+
| 1 | aaa |
| 2 | bbb |
| 3 | ccc |
| 4 | ddd |
+----+------+
#slave端查看
mysql> select * from db1.tb1;
+----+------+
| id | name |
+----+------+
| 1 | aaa |
| 2 | bbb |
| 3 | ccc |
+----+------+
#数据没有同步
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.226.20
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: binlog.000003
Read_Master_Log_Pos: 1689
Relay_Log_File: relaylog.000002
Relay_Log_Pos: 1378
Relay_Master_Log_File: binlog.000003
Slave_IO_Running: Yes
Slave_SQL_Running: No #已经变成了No
在slave端:停止mysql并删除mysql数据目录data
[root@slave data]# service mysqld stop
[root@slave data]# cd ../
[root@slave mysql]# rm -rf data/*
在master端:停止mysql并删除文件data/auto.cnf
[root@master mysql]# service mysqld stop
[root@master mysql]# rm -rf data/auto.cnf
重新同步
[root@master mysql]# rsync -av /usr/local/mysql/data [email protected]:/usr/local/mysql/
开启mysql
service mysqld start
验证
[root@slave mysql]# mysql -uroot -p123
mysql> select * from db1.tb1;
+----+------+
| id | name |
+----+------+
| 1 | aaa |
| 2 | bbb |
| 3 | ccc |
| 4 | ddd |
+----+------+
查询需要跳过的事务(向从服务器添加内容)的GTIDs编号
[root@slave1 data]# mysqlbinlog relaylog.000002|less
#选择编号最大的relaylog
# at 756
#181015 12:04:45 server id 10 end_log_pos 817 CRC32 0x5374f49e GTID [commit=yes]
SET @@SESSION.GTID_NEXT= '044e6392-cf9b-11e8-a748-000c294ca304:3'/*!*/;
解决步骤
mysql> stop slave;
mysql> SET @@SESSION.GTID_NEXT= '13e36f00-eb70-11ea-91a8-000c29d1f40a:1'/*!*/;
mysql> BEGIN;
mysql> commit;
#使用下一个自动生成的全局事务ID
mysql> SET @@SESSION.GTID_NEXT= 'AUTOMATIC';
mysql> start slave;
mysql> show slave status\G
所谓的半同步复制就是master每commit一个事务(一个改变数据的操作),要确保slave接受完主服务器发送的binlog日志文件并写入到自己的中继日志relay log里,然后会给master信号,告诉对方已经接收完毕,这样master才能把事物成功commit。这样就保证了master-slave的数据绝对的一致,但是会牺牲master的性能,因为需要一定的等待时间。
基于M-S架构
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.226.20
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: binlog.000005
Read_Master_Log_Pos: 194
Relay_Log_File: relaylog.000003
Relay_Log_Pos: 317
Relay_Master_Log_File: binlog.000005
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
给master安装plugin插件
mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
mysql> show global variables like 'rpl_semi_sync%';
+-------------------------------------------+------------+
| Variable_name | Value |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled | OFF |
| rpl_semi_sync_master_timeout | 10000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_for_slave_count | 1 |
| rpl_semi_sync_master_wait_no_slave | ON |
| rpl_semi_sync_master_wait_point | AFTER_SYNC |
+-------------------------------------------+------------+
给slave安装plugin插件
mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
mysql> show global variables like 'rpl_semi_sync%';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled | OFF |
| rpl_semi_sync_slave_trace_level | 32 |
+---------------------------------+-------+
给master的plugin插件激活
mysql> set global rpl_semi_sync_master_enabled=on;
mysql> show global variables like 'rpl_semi_sync%';
+-------------------------------------------+------------+
| Variable_name | Value |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled | ON |
| rpl_semi_sync_master_timeout | 10000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_for_slave_count | 1 |
| rpl_semi_sync_master_wait_no_slave | ON |
| rpl_semi_sync_master_wait_point | AFTER_SYNC |
+-------------------------------------------+------------+
给slave的plugin插件激活
mysql> set global rpl_semi_sync_slave_enabled=on;
mysql> show global variables like 'rpl_semi_sync%';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled | ON |
| rpl_semi_sync_slave_trace_level | 32 |
+---------------------------------+-------+
在SLAVE服务器中重启IO线程
mysql> stop slave IO_THREAD;
mysql> start slave IO_THREAD;
测试验证
#master端插入数据
mysql> insert into db1.tb1 values (null,'eee');
mysql> select * from db1.tb1;
+----+------+
| id | name |
+----+------+
| 1 | aaa |
| 2 | bbb |
| 3 | ccc |
| 4 | ddd |
| 5 | eee |
+----+------+
mysql> show global status like 'rpl_semi_sync%_yes_tx';
+-----------------------------+-------+
| Variable_name | Value |
+-----------------------------+-------+
| Rpl_semi_sync_master_yes_tx | 1 |
+-----------------------------+-------+
####表示这次事务成功从slave返回一次确认信号
#slave查看
mysql> select * from db1.tb1;
+----+------+
| id | name |
+----+------+
| 1 | aaa |
| 2 | bbb |
| 3 | ccc |
| 4 | ddd |
| 5 | eee |
+----+------+
模拟slave服务器故障,再次测试
#slave停用mysql
[root@slave mysql]# service mysqld stop
#master端再次插入数据
mysql> insert into db1.tb1 values (null,'fff');
####这次插入无响应,默认需要等待10秒
mysql> show global status like 'rpl_semi_sync%_yes_tx';
+-----------------------------+-------+
| Variable_name | Value |
+-----------------------------+-------+
| Rpl_semi_sync_master_yes_tx | 1 |
+-----------------------------+-------+
####表示这次事务没有从slave端获返回确认信号(在原来的基础上加一才表明有返回)
mysql> insert into db1.tb1 values (null,'ggg');
####这次插入无响应,但不需要等待,因为变成了异步复制
mysql> show global status like 'rpl_semi_sync%_yes_tx';
+-----------------------------+-------+
| Variable_name | Value |
+-----------------------------+-------+
| Rpl_semi_sync_master_yes_tx | 1 |
+-----------------------------+-------+
重新启动mysql的半同步复制
[root@slave mysql]# service mysqld start
[root@slave mysql]# mysql -uroot -p123
mysql> set global rpl_semi_sync_slave_enabled=on;
mysql> stop slave IO_THREAD;
mysql> start slave IO_THREAD;
#master插入数据
mysql> insert into db1.tb1 values (null,'hhh');
mysql> show global status like 'rpl_semi_sync%_yes_tx';
+-----------------------------+-------+
| Variable_name | Value |
+-----------------------------+-------+
| Rpl_semi_sync_master_yes_tx | 2 |
+-----------------------------+-------+
mysql> show global variables like 'rpl_semi_sync%';
+-------------------------------------------+------------+
| Variable_name | Value |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled | ON |
| rpl_semi_sync_master_timeout | 10000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_for_slave_count | 1 |
| rpl_semi_sync_master_wait_no_slave | ON |
| rpl_semi_sync_master_wait_point | AFTER_SYNC |
+-------------------------------------------+------------+
mysql> set global rpl_semi_sync_master_timeout=1000;
mysql> show global variables like 'rpl_semi_sync%';
+-------------------------------------------+------------+
| Variable_name | Value |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled | ON |
| rpl_semi_sync_master_timeout | 1000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_for_slave_count | 1 |
| rpl_semi_sync_master_wait_no_slave | ON |
| rpl_semi_sync_master_wait_point | AFTER_SYNC |
+-------------------------------------------+------------+
插件搜索
mysql> select plugin_name,load_option from information_schema.plugins;
+----------------------------+-------------+
| plugin_name | load_option |
+----------------------------+-------------+
| binlog | FORCE |
| mysql_native_password | FORCE |
| sha256_password | FORCE |
| PERFORMANCE_SCHEMA | FORCE |
| MEMORY | FORCE |
| MRG_MYISAM | FORCE |
| InnoDB | FORCE |
| INNODB_TRX | FORCE |
| INNODB_LOCKS | FORCE |
| INNODB_LOCK_WAITS | FORCE |
| INNODB_CMP | FORCE |
| INNODB_CMP_RESET | FORCE |
| INNODB_CMPMEM | FORCE |
| INNODB_CMPMEM_RESET | FORCE |
| INNODB_CMP_PER_INDEX | FORCE |
| INNODB_CMP_PER_INDEX_RESET | FORCE |
| INNODB_BUFFER_PAGE | FORCE |
| INNODB_BUFFER_PAGE_LRU | FORCE |
| INNODB_BUFFER_POOL_STATS | FORCE |
| INNODB_TEMP_TABLE_INFO | FORCE |
| INNODB_METRICS | FORCE |
| INNODB_FT_DEFAULT_STOPWORD | FORCE |
| INNODB_FT_DELETED | FORCE |
| INNODB_FT_BEING_DELETED | FORCE |
| INNODB_FT_CONFIG | FORCE |
| INNODB_FT_INDEX_CACHE | FORCE |
| INNODB_FT_INDEX_TABLE | FORCE |
| INNODB_SYS_TABLES | FORCE |
| INNODB_SYS_TABLESTATS | FORCE |
| INNODB_SYS_INDEXES | FORCE |
| INNODB_SYS_COLUMNS | FORCE |
| INNODB_SYS_FIELDS | FORCE |
| INNODB_SYS_FOREIGN | FORCE |
| INNODB_SYS_FOREIGN_COLS | FORCE |
| INNODB_SYS_TABLESPACES | FORCE |
| INNODB_SYS_DATAFILES | FORCE |
| INNODB_SYS_VIRTUAL | FORCE |
| CSV | FORCE |
| MyISAM | FORCE |
| partition | ON |
| FEDERATED | OFF |
| BLACKHOLE | ON |
| ARCHIVE | ON |
| ngram | ON |
| rpl_semi_sync_master | ON |
+----------------------------+-------------+
卸载插件rpl_semi_sync_master
mysql> uninstall plugin rpl_semi_sync_master;
ERROR 1883 (HY000): Plugin 'rpl_semi_sync_master' cannot be uninstalled now. Stop any active semisynchronous slaves of this master first.
#需要先卸载slave上的rpl_semi_sync_slave;
mysql> uninstall plugin rpl_semi_sync_slave;
ERROR 1883 (HY000): Plugin 'rpl_semi_sync_slave' cannot be uninstalled now. Stop any active semisynchronous I/O threads on this slave first.
#卸载rpl_semi_sync_slave,需要先关闭IO线程
mysql> stop slave IO_THREAD;
mysql> uninstall plugin rpl_semi_sync_slave;
mysql> uninstall plugin rpl_semi_sync_master;
ERROR 1883 (HY000): Plugin 'rpl_semi_sync_master' cannot be uninstalled now. Stop any active semisynchronous slaves of this master first.
#卸载rpl_semi_sync_master,还需要先使其失活
mysql> set global rpl_semi_sync_master_enabled=OFF;
mysql> uninstall plugin rpl_semi_sync_master;