昆明网站建设哪家比较,台州优秀网站设计,汕头百姓网二手车交易市场,做网站如何推广一、MySQL集群架构的介绍
我们在使用MySQL数据库的时候#xff0c;只是一个单机的数据库服务。在实际的生产环境中#xff0c;数据量可能会非常庞大#xff0c;这样单机服务的MySQL在使用的时候#xff0c;性能会受到影响。并且单机的数据安全想也会受到影响。因此在生产黄…一、MySQL集群架构的介绍
我们在使用MySQL数据库的时候只是一个单机的数据库服务。在实际的生产环境中数据量可能会非常庞大这样单机服务的MySQL在使用的时候性能会受到影响。并且单机的数据安全想也会受到影响。因此在生产黄静中我们通常搭建MySQL的集群架构来提供庞大数据量的基础上的高性能读写的需求。 主从架构介绍 又有一些其他的名称主从模式、主从复制等。 所谓的主从架构指的是建立多个完全一样的数据库其中一个数据库作为主库主要是用的数据库其他的作为从库次要的数据库。主从架构分为很多种一主一从、双主架构、一主多从、多主多从等模式。 通常主库可读可写从库只读。 MySQL最常见也是最简单的主从架构的实现就是“主从复制MySQL Replication”模式这也是MySQL自带的功能无需借助于第三方的工具就可以实现一个主从架构的集群模式。 主从架构相比较于单机服务的MySQL来说优势有很多。 最常见的优势就是写操作连接主库读操作连接从库实现读写分离。 主从复制的原理 主从复制是通过重演binlog来实现主库数据的异步复制。 即在主库上打开binlog记录每一次的数据库操作然后从库会有一个IO线程负责跟主库建立TCP连接请求主库将binlog传输到从库。此时主库上会有一个Log Dump线程负责通过这个TCP连接把binlog日志传输给从库的IO线程。接着从库的IO线程会把读取到的binlog日志数据写入自己的中继日志文件Relay中。然后从库上另外一个SQL线程会读取中继日志文件中的操作进行操作重演打到还原数据的目的。
1、主库的数据发生了变更将日志写入到主库的binlog中。 2、主库的LogDump线程将binlog文件传输到从库的IO线程。 3、从库的IO线程将接收到的binlog写入到relay log中。 4、从库的SQL线程读取relay log中的日志并操作重演将结果同步到从库中。
二、MySQL主从复制的实现
1、环境说明 要实现MySQL的主从架构的搭建需要满足以下条件
所有节点的MySQL版本必须一致所有节点的时间必须同步所有节点需要启动binlog服务 2、主库配置 我们需要编辑MySQL配置文件这个配置文件在不同的操作系统中的位置和名称都不同需要根据自己的操作系统来查找这个文件
Windows: C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
Linux: /etc/my.cnf
// macOS:
// dmg安装: /etc/my.cnf
// homebrew安装:
Intel CPU: /usr/local/homebrew/etc/my.cnf
AppleSilicon CPU: /opt/homebrew/etc/my.cnf1、在[mysqld]的下方添加或修改如下属性:
// 服务节点的唯一标识需要给集群中的每个服务分配一个单独的ID
server-id101
// 打开binlog日志并指定文件名
log_binmaster-bin
// binlog日志文件
log_bin-indexmaster-bin.index2、修改完成之后需要重启MySQL服务 为root用户分配replication slave的权限
// 登录到主库
mysql -u root -p
// 为root用户分配权限
// MySQL8中需要先添加root% 这个用户
// create user root% identified by 123456
mysql grant replication slave on *.* to root%;
mysql flush privileges;
// 查看主节点同步状态
mysql show master status;
--------------------------------------------------------------------------------
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
--------------------------------------------------------------------------------
| master-bin.000001 | 543 | | | |
--------------------------------------------------------------------------------
1 row in set (0.00 sec)在上述输出结果中 File当前日志文件 Position日志文件中的索引 Binlog_Do_DB需要记录binlog日志的库不设置标识全部的库 Binlog_Ignore_DB不需要记录binlog日志的库 3、从库配置 我们需要编辑MySQL配置文件这个配置文件在不同的操作系统中的位置和名字都不同需要根据自己的操作系统来查找这个文件
Windows: C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
Linux: /etc/my.cnf
macOS:
dmg安装: /etc/my.cnf
homebrew安装:
Intel CPU: /usr/local/homebrew/etc/my.cnf
AppleSilicon CPU: /opt/homebrew/etc/my.cnf在[mysqld]的下方添加或修改如下属性:
// 服务节点的唯一标识需要给集群中的每个服务分配一个单独的ID
// 一定要注意不能和其他节点重复
server-id102
// 打开binlog日志并指定文件名
log_binslave-bin
// 打开relaylog日志
relay_logslave-relay-bin
relay_log-indexslave-relay-bin.index
skip-slave-start修改完成之后需要重启MySQL服务 然后登录到其他从库设置从主库同步状态
登录从库
mysql -uroot -p
设置同步主节点
change master to
master_host192.168.10.101, # 设置主库的地址
master_port3306, # 设置主库使用的端口号
master_userroot, # 设置主库的用户名
master_password123456, # 设置主库的密码
master_log_filemaster-bin.000001, # 设置主库正在使用的binlog文件可以在主库使用 show master status 查询
master_log_pos543; # 设置从什么位置同步
开启slave
start slave;
查看主从同步状态
show slave status;// 也可以使用 show slave status \G*************************** 1. row ***************************Slave_IO_State: Waiting for source to send eventMaster_Host: 192.168.10.101Master_User: rootMaster_Port: 3306Connect_Retry: 60Master_Log_File: master-bin.000001Read_Master_Log_Pos: 916Relay_Log_File: slave-relay-bin.000002Relay_Log_Pos: 1133Relay_Master_Log_File: master-bin.000001Slave_IO_Running: YesSlave_SQL_Running: Yes注意 正常的结果是如上所示的结果但是总有意外的时候 有些同学可能会出现 Slave_IO_Running:Connecting的状态甚至是NO的状态说明从库的IO线程启动失败。原因如下 1、可能是主库设置错误检查 master_host 和 master_port的设置是否正确 2、可能是主库的用户名和密码错误检查 master_user 和 master_password 是否正确 3、可能是主库防火墙未关闭检查防火墙 4、可能是主库不能远程登录检查主库用户的远程登录权限 5、可能是 master_log_file 文件设置出问题 6、可能是虚拟机克隆导致的两个节点的uuid相同检查 /var/lib/mysql/auto.cnf 中记录的uuid如果相同的话随便修改一个重启服务即可。 上述几种错误情况在修改之后都是需要重新启动slave服务的。先使用 stop slave 停止服务再使用 start slave开启 有些同学可能会出现 Slave_SQL_Running: No 的状态说明从库的SQL线程启动失败一般是因为执行主库同步过来的数据的时候失败了例如需要创建的数据库、表已经存在导致。 解决方案 删除从库中同名的库、表从主库的日志中恢复数据。 如果想要保留从库中的库、表先停止slave服务设置 set global sql_slave_skip_counter 1; 来设置需要跳过的错误的个数。1是可以修改的想要跳过几个错误就设置为多少。然后启动slave服务即可。 三、主从复制测试 我们在主库中创建数据库、创建表可以在从库中看到有数据同步过来了。而且在从库中使用 show slave status \G 来查看从库的状态的时候会发现记录的Pos位置已经更新。 特点 MySQL的主从复制架构下可以实现读写分离、业务分流来降低单个数据库的压力。