如何填写网站建设计划表,网站设计结构,wordpress 栏目导航,招聘网站开发计划目录 1.MySQL主从复制是什么
2.MySQL主从复制的意义
3.MySQL主从复制原理
4.数据同步一致性问题
5.实现方式 1.MySQL主从复制是什么
MySQL主从复制就是指数据可以从一台MySQL的主节点复制到一个或多个从节点。
MySQL默认采用异步复制方式#xff0c;这样从节点不用一直访…目录 1.MySQL主从复制是什么
2.MySQL主从复制的意义
3.MySQL主从复制原理
4.数据同步一致性问题
5.实现方式 1.MySQL主从复制是什么
MySQL主从复制就是指数据可以从一台MySQL的主节点复制到一个或多个从节点。
MySQL默认采用异步复制方式这样从节点不用一直访问主服务器来更新数据数据更新可以仅复制特点的数据库、表等。
2.MySQL主从复制的意义
1为了实现读写分离让主服务器负责写从服务器负责读。这样可以保证当主库更新数据进行锁表时也可以读取数据。主从复制是读写分离的前提。
2做数据的热备。可以备份数据。当主节点挂掉了还可以访问从节点的数据。
3降低磁盘的I/O访问频率提高单个机器的I/O性能。
3.MySQL主从复制原理
简单来说MySQL主从复制主要依靠两个二进制文件Binary Log和Relay log还有两个进程I/O Thread和SQL Thread实现。
如下图所示 当主服务器master发生数据更新时会将其data changes写入Binary log的日志文件中从服务器slave会定时对Binary log进行探测判断其是否发送改变如果改变则启动从服务器中的 I/O Thread线程读取Binary log文件中的内容并将其写入至自己的Relay log日志文件中然后使用SQL thread读取Relay log中的内容最后进行replay逐一解析为sql语句执行复制数据库数据。过程完成后I/O Thread和SQL thread进入休眠直至下一次唤起。
关于Binary log记录的data changes有以下两种类型选择
statement每一条数据更新都会记录到binary log中。即记录sql语句row:基于行的复制仅记录哪条记录被修改了修改成什么样。即记录数据的修改行为
4.数据同步一致性问题
由于网络传输中会存在主从延迟可能会导致用户从从服务器上读取的数据不是主服务器上最新的数据的问题即主从同步中的数据不一致性问题。从数据一致性弱到强有以下三种方式
异步复制主服务器执行事务后直接提交不等待从服务器的确认通知。数据一致性较弱主服务器提交时刻t1到从服务器复制完成时刻t2之间读取数据就会存在一致性问题半同步复制主服务器执行事务后等待至少一个从服务器接收到了binary log并写入中继日志后后得到确认通知ack后认为写操作完了再返回给客户端。组复制基于Paxos协议的状态机复制。即将多个节点组成一个复制组。在执行读写事务时需要一致性协议层的同意即同意的节点数N/2 1才可以提交在执行只读事务时则不需要经过组内同意。
5.实现方式
本次案例以linux操作系统为例
首先需要准备两个ip地址分别安装同一版本的MySQL。否则进行数据复制时可能会导致错误。
服务器ip地址mysq版本master192.168.0.200:33065.7slave192.168.0.201:33065.7
1进入主数据库创建用户,并且给该用户seven授予REPLICATION SLAVE权限
GRANT REPLICATION SLAVE ON *.* to seven% identified by Root123456;
修改配置文件在/conf/my.cnf文件
[client]
default_character_setutf8
[mysqld]
collation_server utf8_general_ci
character_set_server utf8
## 设置server_id, 同一个局域网中需要唯一
server_id101
## 指定不需要同步的数据库名称
binlog-ignore-dbmysql
## 开启二进制日志功能
log-binmall-mysql-bin
## 设置二进制日志使用内存大小事务
binlog_cache_size1M
## 设置使用的二进制日志格式mixed,statement,row
binlog_formatmixed
## 二进制日志过期清理时间。默认值为0表示不自动清理
expire_logs_days7
## 跳过主从复制中遇到的所有错误或指定类型的错误避免slave端复制中断
## 如1062错误是指一些主键重复1032错误是因为主从数据库数据不一致
slave_skip_errors1062请注意server_id唯一修改完成后重启mysql
进入Mysql master记录以下数据 2进入从服务器修改配置
[client]
default_character_setutf8
[mysqld]
collation_server utf8_general_ci
character_set_server utf8
## 设置server_id, 同一个局域网内需要唯一
server_id102
## 指定不需要同步的数据库名称
binlog-ignore-dbmysql
## 开启二进制日志功能以备slave作为其它数据库实例的Master时使用
log-binmall-mysql-slave1-bin
## 设置二进制日志使用内存大小事务
binlog_cache_size1M
## 设置使用的二进制日志格式mixed,statement,row
binlog_formatmixed
## 二进制日志过期清理时间。默认值为0表示不自动清理
expire_logs_days7
## 跳过主从复制中遇到的所有错误或指定类型的错误避免slave端复制中断
## 如1062错误是指一些主键重复1032是因为主从数据库数据不一致
slave_skip_errors1062
## relay_log配置中继日志
relay_logmall-mysql-relay-bin
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates1
## slave设置只读具有super权限的用户除外
read_only1server_id必须不一致同理配置完成后重启mysql
然后在从服务器中设置主库地址及同步位置
change master to master_hostmasterd的ip,master_user刚刚创建的用户名,master_passwordRoot123456,master_log_filemasterd的fileshow master status中查得,master_log_pos154;参数说明
master_host : 主数据库的IP地址master_user : 访问主库进行主从复制的用户名(上面创建并赋予slave权限的)master_password : 访问主库进行主从复制的用户名对应的密码请注意密码对应master_log_file : 从哪个日志文件开始同步master_log_pos : 从指定日志文件的哪个位置开始同步
注意master_log_file和master_log_pos的值都为刚刚截图记录的值
最后在从服务器开启主从复制 start slave;
主从复制即成功。
3我们可以在从机查看主从复制状态
show slave status \GSlave_IO_Running和Slave_SQL_Running两个参数都为yes即成功。