如何建一个网站多少钱前端学校网站开发视频
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
 - MySQL复制过程分为三部:
 
- 一、准备工作
 - 二、配置==>主库Master
 - 三、配置==>从库Slave
 - Slave_IO_Running: Yes
 - Slave_SQL_Running: Yes
 
- 四、测试
 - 至此,主库分离成功实现
 
前言
介绍
MySQL主从复制是一个异步的复制过程,底层是基于Mysql数据库自带的二进制日志功能。就是一台或多台MySQL数据库(slave,即从库)从另一台MySQL数据库(master,即主库)进行日志的复制然后解析日志并应用到自身,最终实现从库的数据和主库的数据保持一致。MySQL主从复制是MySQL数据库自带功能,无需借助第三方工具

MySQL复制过程分为三部:
==> master将改变记录到二进制日志(binary log)
==> slave将master的binary log拷贝到它的中继日志(relay log)
==> slave重做中继日志中的事件,将改变应用到自己的数据库中
一、准备工作
1、提前准备好两台服务器,分别安装Mysql
 ==> 主库Master 192.168.100.66
==> 从库Slave 192.168.100.67
2、使用克隆弄出另一台服务器的注意事项
 博主两台linux服务器都是使用VMware虚拟机搭建的,为了避免重装mysql的麻烦,另外一台linux服务器是克隆出来的,克隆之后必须修改Mac地址,ip,UUID,还有mysql的UUID。
二、配置==>主库Master
1、在/etc/hosts里添加两侧主机的IP和主机名(选做)
 例
 192.168.100.66 mysql57
 192.168.100.67 mysql57b
2、 先让所有的MYSQL数据库的UUID保持不同(如果你是直接复制的安装好MYSQL的虚拟机,那么每个虚拟机上搭载的MYSQL数据库UUID是一致的)
vi /data/mysql_data/auto.cnf
[auto]
 server-uuid=f787ff18-b491-11eb-9910-080027c8eeff
 如果大家发现所有的MYSQL的uuid都是一个,那么你就给他改一下:
 [auto]
 server-uuid=f787ff18-b491-11eb-9910-080027c8eefa
3、主节点参数修改Mysql数据库的配置文件/etc/my.cnf
#MASTER-SLAVE
 server-id = 1
 binlog-do-db=hr
 #binlog-do-db=
 binlog-ignore-db=mysql
 binlog-ignore-db=information_schema
 binlog-ignore-db=performance_schema
 binlog-ignore-db=sys
 #expire_logs_days=7
参数说明:
 server-id = 1 主节点的server-id,集群中每一台服务器的server-id都不允许相同
 binlog-do-db=hr 你需要复制的库 hr
 #binlog-do-db=test
 binlog-ignore-db=mysql #不需要复制的库
 binlog-ignore-db=information_schema
 binlog-ignore-db=performance_schema
 binlog-ignore-db=sys
 #expire_logs_days=7 binlog日志过期天数设置
4、重新启动mysql数据库服务
 servicer mysqld start
5、创建复制用户(主库)
 GRANT ALL PRIVILEGES ON . TO ‘repl’@‘%’ IDENTIFIED BY ‘123456’ WITH GRANT OPTION;
 FLUSH PRIVILEGES;
三、配置==>从库Slave
1、从节点参数修改Mysql数据库的配置文件/etc/my.cnf
 server-id = 2
 read_only = 1
 #super_read_only=1
 relay-log-index=slave-relay-bin.index
 relay-log=slave-relay-bin
 master_info_repository=TABLE
 relay_log_info_repository=TABLE
 #relay_log_recovery=1
参数说明
 server-id = 2
 从服务器的server-id 不能和主服务器相同
read_only = 1
 #super_read_only=1
 设置从库只读状态,避免在从库上写操作,但该指令对超级管理员是无效的,mysql5.7增加了一个新的参数super_read_only,该参数使得超级管理员也无法进行写操作。但是super_read_only这个参数大部分都是关闭掉的
relay-log=slave-relay-bin
 中转(中继)日志文件前缀名(base name) 也是默认在datadir目录下
relay-log-index=slave-relay-bin.index
 中转(中继)日志后缀名,默认host_name-relay-bin.index,在datadir目录下。
master_info_repository=TABLE 把master.info(主从状态,配置信息)记录下来,默认记录到file里面,建议使用表记录
relay_log_info_repository=TABLE
 realy_log_info_repository用来决定slave同步的位置信息记录在哪里,同样有两个参数。如果relay_log_info_repository=file,就会创建一个realy-log.info,如果relay_log_info_repository=table,就会创建mysql.slave_relay_info表来记录同步的位置信息。
#relay_log_recovery=1 #从机禁止写
 为了让从库是crash safe的必须要设置relay_log_recovery=1,该参数的含义是:当从库发生崩溃或重启时,它会把那些未做完的中继日志删除,并向主库重新获取日志,再次产生中继日志的恢复,建议在从库上开启relay_log_recovery参数,默认是关闭的。当然了你为了从库得到更好的优化效果的话,请把它关掉
2、查看主库状态信息
show master status\G;
 show master status;
mysql> show master status;
+-----------------+----------+--------------+-------------------------------------------------+-------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB                                | Executed_Gtid_Set |
+-----------------+----------+--------------+-------------------------------------------------+-------------------+
| mysqlbin.000017 |      154 | hr           | mysql,information_schema,performance_schema,sys |                   |
+-----------------+----------+--------------+-------------------------------------------------+-------------------+ 
3、登录Mysql数据库,配置将连接的主库信息
 从库按照主库给出信息进行修改
 change master to
 master_host=‘192.168.100.66’,
 master_port=3306,
 master_user=‘repl’,
 master_password=‘123456’,
 master_log_file=‘mysqlbin.000017’,
 master_log_pos=154;
注:里面的信息要写自己主库的信息,账号写自己创建的账号
4、查看从库信息状态
 启动从库 进行测试
 start slave;
 stop slave;
 show slave status \G;
show slave status \G;
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.100.66Master_User: replMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysqlbin.000017Read_Master_Log_Pos: 154Relay_Log_File: slave-relay-bin.000002Relay_Log_Pos: 319Relay_Master_Log_File: mysqlbin.000017Slave_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: 154Relay_Log_Space: 526Until_Condition: NoneUntil_Log_File:Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File:Master_SSL_CA_Path:Master_SSL_Cert:Master_SSL_Cipher:Master_SSL_Key:Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error:Last_SQL_Errno: 0Last_SQL_Error:Replicate_Ignore_Server_Ids:Master_Server_Id: 1Master_UUID: 497bc227-19c5-11ee-a978-080027b1fb7dMaster_Info_File: mysql.slave_master_infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Slave has read all relay log; waiting for more updatesMaster_Retry_Count: 86400Master_Bind:Last_IO_Error_Timestamp:Last_SQL_Error_Timestamp:Master_SSL_Crl:Master_SSL_Crlpath:Retrieved_Gtid_Set:Executed_Gtid_Set:Auto_Position: 0Replicate_Rewrite_DB:Channel_Name:Master_TLS_Version:
1 row in set (0.00 sec) 
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
状态显示yes正常搭建成功
如果你的虚拟机崩溃了恢复后导致无法同步,或者你多次配置从库的主库信息初始化阶段失败的话。
报错信息为:初始化信息失败
ERROR 1201 (HY000): Could not initialize master info structure; more error messages can be found in the MySQL error log
先执行
 reset slave; 清空你之前的配置的从库信息
 然后再重启从库
 start slave;
重点说明的是:如果你是第一次配置主从复制集群的话,一般不会出现这个问题。
四、测试
主库和从库同步完成
