c 网站建设教程视频,余江县建设局网站,porto wordpress,wordpress unknownMysql 高可用
复制
复制是解决系统高可用的常见手段。其思路就是#xff1a;不要把鸡蛋都放在一个篮子里。
复制解决的基本问题是让一台服务器的数据与其他服务器保持同步。一台主库的数据可以同步到多台备库上#xff0c;备库本身也可以被配置成另外一台服务器的主库。主…Mysql 高可用
复制
复制是解决系统高可用的常见手段。其思路就是不要把鸡蛋都放在一个篮子里。
复制解决的基本问题是让一台服务器的数据与其他服务器保持同步。一台主库的数据可以同步到多台备库上备库本身也可以被配置成另外一台服务器的主库。主库和备库之 间可以有多种不同的组合方式。
MySQL 支持两种复制方式基于行的复制和基于语句的复制。这两种方式都是通过在主库上记录 bin log、在备库重放日志的方式来实现异步的数据复制。这意味着复制过程存在时延这段时间内主从数据可能不一致。
复制如何工作
在 Mysql 中复制分为三个步骤分别由三个线程完成
binlog dump 线程 - 主库上有一个特殊的 binlog dump 线程负责将主服务器上的数据更改写入 binlog 中。I/O 线程 - 备库上有一个 I/O 线程负责从主库上读取 binlog并写入备库的中继日志relay log中。 SQL线程 - 备库上有一个 SQL 线程负责读取中继日志relay log并重放其中的 SQL 语句。 这种架构实现了数据备份和数据同步的异步解耦。但这种架构也限制了复制的过程其中最重要 的一点是在主库上并发运行的查询在备库只能串行化执行因为只有一个 SQL 线程来重放 中继日志中的事件
主备配置
假设需要配置一对 Mysql 主备节点环境如下
主库节点192.168.8.10备库节点192.168.8.11
主库上的操作
1修改配置并重启
执行 vi /etc/my.cnf 添加如下配置
[mysqld]
server-id1
log_bin/var/lib/mysql/binlogserver-id - 服务器 ID 号。在主从架构中每台机器的 ID 必须唯一。log_bin - 同步的日志路径及文件名一定注意这个目录要是 mysql 有权限写入的
修改后重启 mysql 使配置生效
systemctl restart mysql2创建用于同步的用户
进入 mysql 命令控制台
$ mysql -u root -p
Password:执行以下 SQL
-- a. 创建 slave 用户
CREATE USER slave% IDENTIFIED WITH mysql_native_password BY 密码;
-- 为 slave 赋予 REPLICATION SLAVE 权限
GRANT REPLICATION SLAVE ON *.* TO slave%;-- b. 或者创建 slave 用户并指定该用户能在任意主机上登录
-- 如果有多个备库又想让所有备库都使用统一的用户名、密码认证可以考虑这种方式
CREATE USER slave% IDENTIFIED WITH mysql_native_password BY 密码;
GRANT REPLICATION SLAVE ON *.* TO slave%;-- 刷新授权表信息
FLUSH PRIVILEGES;注意在 Mysql 8 中默认密码验证不再是 password。所以在创建用户时create user ‘username’‘%’ identified by ‘password’; 客户端是无法连接服务的。所以需要加上 IDENTIFIED WITH mysql_native_password BY ‘password’
补充用户管理 SQL:
-- 查看所有用户
SELECT DISTINCT CONCAT(User: , user, , host, ;) AS query
FROM mysql.user;-- 查看用户权限
SHOW GRANTS FOR root%;-- 创建用户
-- a. 创建 slave 用户并指定该用户只能在主机 192.168.8.11 上登录
CREATE USER slave192.168.8.11 IDENTIFIED WITH mysql_native_password BY 密码;
-- 为 slave 赋予 REPLICATION SLAVE 权限
GRANT REPLICATION SLAVE ON *.* TO slave192.168.8.11;-- 删除用户
DROP USER slave192.168.8.11;3加读锁
为了主库与从库的数据保持一致我们先为 mysql 加入读锁使其变为只读。
mysql FLUSH TABLES WITH READ LOCK;4查看主库状态
mysql show master status;
----------------------------------------------------------------------------------------------------------
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
----------------------------------------------------------------------------------------------------------
| mysql-bin.000001 | 4202 | | mysql,information_schema,performance_schema | |
----------------------------------------------------------------------------------------------------------
1 row in set (0.00 sec)注意需要记录下 File 和 Position后面会用到。
5导出 sql
mysqldump -u root -p --all-databases --master-data dbdump.sql6解除读锁
mysql UNLOCK TABLES;7将 sql 远程传送到备库上
scp dbdump.sql root192.168.8.11:/home备库上的操作
1修改配置并重启
执行 vi /etc/my.cnf 添加如下配置
[mysqld]
server-id2
log_bin/var/lib/mysql/binlogserver-id - 服务器 ID 号。在主从架构中每台机器的 ID 必须唯一。log_bin - 同步的日志路径及文件名一定注意这个目录要是 mysql 有权限写入的
修改后重启 mysql 使配置生效
systemctl restart mysql2导入 sql
mysql -u root -p /home/dbdump.sql3在备库上建立与主库的连接
进入 mysql 命令控制台
$ mysql -u root -p
Password:执行以下 SQL
-- 停止备库服务
STOP SLAVE;-- 注意MASTER_USER 和
CHANGE MASTER TO
MASTER_HOST192.168.8.10,
MASTER_USERslave,
MASTER_PASSWORD密码,
MASTER_LOG_FILEbinlog.000001,
MASTER_LOG_POS4202;MASTER_LOG_FILE 和 MASTER_LOG_POS 参数要分别与 show master status 指令获得的 File 和 Position 属性值对应。MASTER_HOST 是主库的 HOST。MASTER_USER 和 MASTER_PASSWORD 是在主节点上注册的用户及密码。
4启动 slave 进程
mysql start slave;5查看主从同步状态
mysql show slave status\G;说明如果以下两项参数均为 YES说明配置正确。
Slave_IO_RunningSlave_SQL_Running 6将备库设为只读
mysql set global read_only1;
mysql set global super_read_only1;
mysql show global variables like %read_only%;
------------------------------
| Variable_name | Value |
------------------------------
| innodb_read_only | OFF |
| read_only | ON |
| super_read_only | ON |
| transaction_read_only | OFF |
------------------------------注设置 slave 服务器为只读并不影响主从同步。
复制的原理
读写分离
主服务器用来处理写操作以及实时性要求比较高的读操作而从服务器用来处理读操作。
读写分离常用代理方式来实现代理服务器接收应用层传来的读写请求然后决定转发到哪个服务器。
MySQL 读写分离能提高性能的原因在于
主从服务器负责各自的读和写极大程度缓解了锁的争用 从服务器可以配置 MyISAM 引擎提升查询性能以及节约系统开销 增加冗余提高可用性。