目录
一、前导
在学习到mysql知识及原理时,bin log日志总是会出现,它一般伴随着出现在Mysql的主从复制。下面重点说一下主从复制知识。
binLog日志是二进制日志,是归档日志,逻辑格式的日志,主要用于主从复制。
二、主从复制形式
三、主从复制类型
3.1、异步复制【默认】
主节点不会主动推送数据到从节点,主库在执行完客户端提交的事务后会立即将结果返给客户端,并不关心从库是否已经接收并处理。
缺点:
如果主节点崩溃,主节点提交的事务还未同步到从节点,此时将从节点升级为主节点,会导致节点间数据不一致。
3.2、同步复制
当主库执行完一个事务,然后所有的从库都复制了该事务并成功执行完才返回成功信息给客户端。
缺点:
性能严重受影响。
3.3、半同步复制
主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到 relay log【中继日志】 中才返回成功信息给客户端(只能保证主库的 Binlog 至少传输到了一个从节点上),否则需要等待直到超时时间然后切换成异步模式再提交。
-------该类型可以解决“异步复制”的数据丢失问题。
3.4、延迟复制
在异步复制基础上,人为设定主库和从库的数据同步延迟时间。
三、主从复制方式(binlog日志模式)
statement level(默认)/语句复制
记录的操作语句,方式简单、二进制文件小,传输带宽占用小。
row level/行数据复制
二进制日志中记录的是更新每一行信息。虽然复制更精确,但日志占用空间大,传输带宽压力大。
Mixed模式/混合类型复制
默认采用语句复制,当发现无法精准复制时,采用行数据复制。
四、my.cnf文件配置
server-id=1 # 此处设置服务器的id,一般习惯于把主数据库设置为1
log-bin=<二进制日志文件保存路径>/mysqlbin # 最好不要与data文件在一个路径,这里文件名推荐使用mysqlbin。linux要注意mysql账户要有读写的权限。
以下的参数写在配置文件中也可以,但是不推荐写在配置文件中,使用数据库命令设置更方便一些。
master-host= # 主服务器的地址
master-user= # 用于复制的账户,这里是指主服务器写账户。到这一步还没有新建账户,所以可以先不用写,等新建完账户后再写。
master-password= # 账户密码,现在也先不用写,生成账户后再写。
master-port=3306 # 数据库端口号,一般默认是3306,如果没修改过不用写。
binlog_format=mixed //主从复制方式
sync_binlog=n //n次事务提交后,mnysql执行一次同步磁盘操作。0表示mysql自己控制,每次提交事务都只write,不fsync;1表示每次提交事务都fsync。
innodb_flush_logs_at_trx_commit=0 //0: log buffer将每秒一次地写入log file中并且刷新到磁盘【丢失1s的事务】。 1: 每次事务log buffer会写入log file并刷新到磁盘。(较为安全)【丢失1个事务】 2:每次事务log buffer会写入log file,但一秒一次刷新到磁盘
skip_slave_start=1 //阻止从库崩溃重启后自动复制
log_slave_update //允许备库将重放的事件也记录到自身的二进制日志中去,可以将备库当做另外一台主库的从库
expire_logs_days=7 //日志过期删除时间
主数据库命令设置:
GRANT REPLICATION SLAVE ON . TO 'username'@'hostname' IDENTIFIED BY 'password'; # username 是账号名,hostname是允许从数据库的IP地址,如果不限制可以写%,password账号密码。这些的信息将来可以写入从数据库的配置文件中。
FLUSH PRIVILEGES;
SHOW MASTER STATUS; # 查看主数据库配置状态信息。主要记录:File和Position的值。
主数据库上命令:
#mysql -uroot -p
mysql> grant replication slave on . to repluser@"%" identified by"123qqq…A";
mysql>quit;
从数据库命令设置:
CHANGE MASTER TO
MASTER_HOST=<主数据库服务器地址>, # 如果配置文件中已经写入,这里就不需要了。
MASTER_USER=<进行复制的主数据库的账号>, # 如果配置文件中已经写入,这里就不需要了。
MASTER_LOG_FILE=<主数据库的logbin文件名>, # 上一步在主数据库中使用SHOW MASTER STATUS命令查出的File参数值。
MASTER_LOG_POSITION=<主数据库的logbin文件定位>; # 上一步在主数据库中使用SHOW MASTER STATUS命令查出的Position参数值。
START SLAVE; # 启动主从复制。
SHOW SLAVE STATUS; # 查看从服务器的启动状态,重点查看: Slave_IO_Running: Yes,Slave_SQL_Running: Yes两个参数必须是Yes,如果不是的话就表示配置失败,需要重新检查修改配置。
STOP SLAVE; #关闭主从复制
从数据库上命令:
mysql -uroot –p密码 //管理员root 本机登录
mysql> show slave status; //查看状态信息,还不是从服务器
mysql> change master to //指定主服务器
-> master_host=“192.168.4.51”, //主服务器ip地址
-> master_user=“repluser”, //主服务器授权用户
-> master_password=“123qqq…A”, //主服务器授权用户密码
-> master_log_file=“master51-bin.000001”,//主服务器日志文件
-> master_log_pos=441; //主服务器日志偏移量
mysql> start slvae //启动从数据库,开启 主从复制
五、主从复制原理及工作过程
原理:
主服务器和从服务器版本号要一致。主服务器配置二进制日志文件,将数据库的变更操作计入到二进制日志,从数据库读取二进制日志,然后同步到从数据库中,保证从数据库与主数据库的一致性。
工作原理: