哪家公司建网站最好,网站打开,机械设备做公司网站,科技类网站一、前言随着应用业务数据不断的增大#xff0c;应用的响应速度不断下降#xff0c;在检测过程中我们不难发现大多数的请求都是查询操作。此时#xff0c;我们可以将数据库扩展成主从复制模式#xff0c;将读操作和写操作分离开来#xff0c;多台数据库分摊请求#xff0…一、前言随着应用业务数据不断的增大应用的响应速度不断下降在检测过程中我们不难发现大多数的请求都是查询操作。此时我们可以将数据库扩展成主从复制模式将读操作和写操作分离开来多台数据库分摊请求从而减少单库的访问压力进而应用得到优化。整理了一份328页MySQLPDF文档本次测试使用两个虚拟机ip192.168.2.21(主) ip192.168.2.22(从)二、主从复制原理同步操作通过 3 个线程实现其基本步骤如下主服务器将数据的更新记录到二进制日志中(记录被称作二进制日志事件)-- 主库线程从库将主库的二进制日志复制到本地的中继日志(relay log)-- 从库 I/O 线程从库读取中继日志中的事件将其重放到数据中 -- 从库 SQL 线程。三、配置主库# 3.1 创建用户为了安全起见准备创建一个新用户用于从库连接主库。# 创建用户create user repl% identified by repl;# 授权只授予复制和客户端访问权限grant replication slave,replication client on *.* to repl% identified by repl;# 3.2 修改配置文件1)vim /etc/my.cnf 在[mysqld]下添加log-bin mysql-binlog-bin-index mysql-bin.indexbinlog_format mixedserver-id 21sync-binlog 1character-set-server utf82)保存文件并重启主库service mysqld restart配置说明log-bin设置二进制日志文件的基本名log-bin-index设置二进制日志索引文件名binlog_format控制二进制日志格式进而控制了复制类型三个可选值-STATEMENT语句复制-ROW行复制-MIXED混和复制默认选项server-id服务器设置唯一ID默认为1推荐取IP最后部分sync-binlog默认为0为保证不会丢失数据需设置为1用于强制每次提交事务时同步二进制日志到磁盘上。# 3.3 备份主数据库数据若主从数据库都是刚刚装好且数据都是一致的直接执行 show master status 查看日志坐标。若主库可以停机则直接拷贝所有数据库文件。若主库是在线生产库可采用 mysqldump 备份数据因为它对所有存储引擎均可使用。1)为了获取一个一致性的快照需对所有表设置读锁flush tables with read lock;2)获取二进制日志的坐标show master status;返回结果-------------------------------------------------------------------------------| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |-------------------------------------------------------------------------------| mysql-bin.000001 | 120 | | | |-------------------------------------------------------------------------------1 row in set (0.00 sec)3)备份数据# 针对事务性引擎mysqldump -uroot -ptiger --all-database -e --single-transaction --flush-logs --max_allowed_packet1048576 --net_buffer_length16384 /data/all_db.sql# 针对 MyISAM 引擎或多引擎混合的数据库mysqldump -uroot --all-database -e -l --flush-logs --max_allowed_packet1048576 --net_buffer_length16384 /data/all_db.sql1 row in set (0.00 sec)4)恢复主库的写操作unlock tables;四、配置从库# 4.1 修改配置文件1)vim /etc/my.cnf 在[mysqld]下添加log-bin mysql-binbinlog_format mixedlog-slave-updates 0server-id 22relay-log mysql-relay-binrelay-log-index mysql-relay-bin.indexread-only 1slave_net_timeout 102)保存文件并重启从库service mysqld restart配置说明log-slave-updates控制 slave 上的更新是否写入二进制日志默认为0若 slave 只作为从服务器则不必启用若 slave 作为其他服务器的 master则需启用启用时需和 log-bin、binlog-format 一起使用这样 slave 从主库读取日志并重做然后记录到自己的二进制日志中relay-log设置中继日志文件基本名relay-log-index设置中继日志索引文件名read-only设置 slave 为只读但具有super权限的用户仍然可写slave_net_timeout设置网络超时时间即多长时间测试一下主从是否连接默认为3600秒即1小时这个值在生产环境过大我们将其修改为10秒即若主从中断10秒则触发重新连接动作。# 4.2 导入备份数据如果 3.3 步骤中没进行备份忽略此步骤。mysql -uroot -p /data/all_db.sql# 4.3 统一二进制日志的坐标根据 3.3 步骤获取的坐标统一到从库中change master tomaster_host192.168.2.21,master_userrepl,master_passwordrepl,master_port3306,master_log_filemysql-bin.000001,master_log_pos120;注意此处使用的是新创建的账户。# 4.4 启动主从复制1)启动从库 slave 线程start slave;2)查看从服务器复制功能状态show slave status\G;返回结果*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.2.21Master_User: replMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000001Read_Master_Log_Pos: 120Relay_Log_File: mysql-relay-bin.000002Relay_Log_Pos: 283Relay_Master_Log_File: mysql-bin.000001Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB:Replicate_Ignore_DB:Replicate_Do_Table:Replicate_Ignore_Table:Replicate_Wild_Do_Table:Replicate_Wild_Ignore_Table:Last_Errno: 0Last_Error:Skip_Counter: 0Exec_Master_Log_Pos: 120此处只张贴部分返回结果。结果说明Slave_IO_Running此进程负责 slave 从 master 上读取 binlog 日志并写入 slave 上的中继日志。Slave_SQL_Running此进程负责读取并执行中继日志中的 binlog 日志。这两个进程的状态需全部为 YES只要有一个为 NO则复制就会停止。当 Relay_Master_Log_File Master_Log_File 且 Read_Master_Log_Pos Exec_Master_Log_Pos 时则表明 slave 和 master 处于完全同步的状态。五、验证使用一个简单的例子在主库创建名为 mysql_test 的数据库如果同步成功那么在从库中也能查询出名为 mysql_test 数据库。六、参考资料