- Published on
MySQL高可用集群部署方案笔录
1. 集群搭建之主从复制
1.1 主从复制作用
1.2 主从复制原理
1.3 binlog和relay日志
1.3.1 binlog的三种模式
1.3.2 开启binlog
修改my.cnf文件,在[mysqld]段下添加:
# binlog刷盘策略
sync_binlog=1
# 需要备份的数据库
binlog-do-db=hello
# 不需要备份的数据库
binlog-ignore-db=mysql
# 启动二进制文件
log-bin=mysql-bin
# 服务器ID
server-id=132
1.3.3 调整binlog日志模式
查看binlog的日志模式:
mysql> show variables like 'binlog_format';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW |
+---------------+-------+
1 row in set (0.00 sec)
调整binlog的日志模式:binlog的三种格式:STATEMENT
、ROW
、MIXED
。
mysql> set binlog_format=STATEMENT;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'binlog_format';
+---------------+-----------+
| Variable_name | Value |
+---------------+-----------+
| binlog_format | STATEMENT |
+---------------+-----------+
1 row in set (0.00 sec)
1.3.4 如何查看binlog和relaylog日志?
方式一:使用mysqlbinlog查看binlog日志文件
因为binlog日志文件:mysql-bin.000005是二进制文件,没法用vi等打开,这时就需要mysql的自带的mysqlbinlog工具进行解码,执行:mysqlbinlog mysql-bin.000005
可以将二进制文件转为可阅读的sql语句。
mysqlbinlog --base64-output=decode-rows -v -v mysql-bin.000001 > binlog.txt
方式二:在MySQL终端查看binlog
show master logs
,查看所有二进制日志列表 ,和show binary logs
同义。
mysql> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 385 |
+------------------+-----------+
1 row in set (0.00 sec)
使用show binlog events
命令可以以列表的形式显示日志中的事件信息。
show binlog events命令的格式:
show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];
说明:
- IN ‘log_name’:指定要查询的binlog文件名(如果省略此参数,则默认指定第一个binlog文件);
- FROM pos:指定从哪个pos起始点开始查起(如果省略此参数,则从整个文件的第一个pos点开始算);
- LIMIT【offset】:偏移量(默认为0);
- row_count:查询总条数(如果省略,则显示所有行)。
mysql> show binlog events in 'mysql-bin.000001';
+--------------+-----+----------------+-----------+-------------+---------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+--------------+-----+----------------+-----------+-------------+---------------------------------------+
| mybin.000001 | 4 | Format_desc | 132 | 123 | Server ver: 5.7.30-log, Binlog ver: 4 |
| mybin.000001 | 123 | Previous_gtids | 132 | 154 | |
+--------------+-----+----------------+-----------+-------------+---------------------------------------+
2 rows in set (0.00 sec)
切换binlog文件:
mysql> flush logs;
Query OK, 0 rows affected (0.00 sec)
注意:刷新日志会生成一个新的日志文件
1.4 案例: 基于Pos主从复制
1.4.1 开放端口
需要将3306端口放行,如果是内网也可关闭防火墙
1.4.2 主服务器配置
查看binlog是否开启可以使用命令:
mysql> show variables like 'log_bin%';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| log_bin | OFF |
| log_bin_basename | |
| log_bin_index | |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
+---------------------------------+-------+
5 rows in set (0.12 sec)
log_bin如果是OFF
代表是未开启状态
第一步:修改my.cnf文件
在[mysqld]段下添加:
# binlog刷盘策略
sync_binlog=1
# 需要备份的数据库
binlog-do-db=hello
# 不需要备份的数据库
binlog-ignore-db=mysql
# 启动二进制文件
log-bin=mysql-bin
# 服务器ID
server-id=132
第二步:重启mysql服务
systemctl restart mysqld
第三步:主机给从机授备份权限
注意:先要登录到MySQL命令客户端
mysql>GRANT REPLICATION SLAVE ON *.* TO '从机MySQL用户名'@'从机IP' identified by '从机MySQL密码';
示例:
GRANT REPLICATION SLAVE ON *.* TO 'root'@'%' identified by 'root';
**注意:**一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如39.99.131.178,加强安全。
mysql5.7对密码的强度是有要求的,必须是字母+数字+符号组成的,可以使用如下方法调整密码强度
设置密码长度最低位数
mysql> set global validate_password_length=4;
设置密码强度级别
mysql> set global validate_password_policy=0;
validate_password_policy有以下取值:
Policy Tests Performe 0 or LOW Length 1 or MEDIUM numeric, lowercase/uppercase, and special characters 2 or STRONG Length; numeric, lowercase/uppercase, and special characters
默认是1,即MEDIUM,所以刚开始设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符。
第四步:刷新权限
mysql> FLUSH PRIVILEGES;
第五步:查询master的状态
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 | 593 | hello | mysql | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set
1.4.3 从服务器配置
第一步:修改my.conf文件
[mysqld]
server-id=133
第二步:重启mysqld服务
systemctl restart mysqld
第三步:重启并登录到MySQL进行配置Slave
mysql>change master to
master_host='123.57.135.5',
master_port=3306,
master_user='root',
master_password='root',
master_log_file='mysql-bin.000002',
master_log_pos=593,
MASTER_AUTO_POSITION=0;
**注意:**语句中间不要断开,
master_port
为MySQL服务器端口号(无引号),master_user
为执行同步操作的数据库账户,593
无单引号(此处的593
就是show master status
中看到的position
的值,这里的mysql-bin.000002
就是file
对应的值)。
第四步:启动从服务器复制功能
mysql>start slave;
第五步:检查从服务器复制功能状态
mysql> show slave status \G;
……………………(省略部分)
Slave_IO_Running: Yes //此状态必须YES
Slave_SQL_Running: Yes //此状态必须YES
……………………(省略部分)
1.4.4 测试
搭建成功之后,往主机中插入数据,看看从机中是否有数据