MySQL主从配置
这里只是做了一个记录,因为因为一些原因停掉从库导致log走远了,主在我自己看的懂
数据库备份
先锁表和把数据库设置为仅读避免备份和恢复的节点不通
-- 加锁
FLUSH TABLES WITH READ LOCK;
SET GLOBAL read_only = ON;
-- 恢复数据后获取binlog日志点
show master status;
-- 创建完从库后解除锁
SET GLOBAL read_only = OFF;
UNLOCK TABLES;
-- 备份数据
mysqldump -u root -p --databases db1 db2 --single-transaction --routines --triggers --events --hex-blob > /back/backup.sql
-- 配合上面的锁在锁内进行
mysql -u root -p < /path/to/backup.sql
创建主从配置
CHANGE MASTER TO MASTER_HOST='192.168.0.250', MASTER_USER='slave', MASTER_PASSWORD='slavepassword', MASTER_LOG_FILE='binlog.000009',MASTER_LOG_POS=157;
主要参数说明
MASTER_HOST
:master节点得host,一般为ipMASTER_USER
:master节点得用户MASTER_PASSWORD
:master节点密码MASTER_LOG_FILE
:MASTER_LOG_FILE
是 MySQL 主从复制中的一个参数,用于指示主数据库当前正在写入的二进制日志文件名。在 MySQL 主从复制过程中,主数据库会将写入的更新操作记录在二进制日志(Binary Log)中,并通过主从复制机制将这些操作传递给从数据库进行复制。每个二进制日志文件都有一个唯一的文件名,通常以数字序列或日期时间作为文件名的一部分,例如mysql-bin.000001
、mysql-bin.000002
等。 当建立主从复制关系时,从数据库会连接到主数据库并请求从哪个二进制日志文件开始复制。主数据库会返回一个包含MASTER_LOG_FILE
和MASTER_LOG_POS
值的参数信息,其中MASTER_LOG_FILE
就是表示当前活动的二进制日志文件的文件名。从数据库接收到MASTER_LOG_FILE
后,会从该文件开始读取二进制日志的内容,并应用到自己的数据库中,以实现与主数据库的数据同步。MASTER_LOG_POS
:MASTER_LOG_POS
是 MySQL 主从复制中的一个参数,它表示主数据库二进制日志的位置(position)。主数据库会将写入的更新操作记录在二进制日志中,并通过主从复制机制将这些操作传递给从数据库,使得从数据库能够与主数据库保持一致。
MASTER_PASSWORD
:建议新建一个专门用来同步得用户指定相应得ip比较好
MASTER_LOG_FILE
和MASTER_LOG_POS
参数来源show master status;
创建完成后使用命令查看部署情况
show slave status;
主要查看这两个参数,都为yes表示创建成功
主从出现问题
出现问题后一般就在查看从库状态里面包含有
根据异常提示去对应得表里面可以找到问题出现得原因,后续再遇到了更新
Slave_SQL_Running: No 问题分析
1.程序可能在slave上进行了写操作
2.也可能是slave机器重启后,事务回滚造成的.
备机上每写一次,主机master的pos都会变一次,有时候同步没成功,就会导致主从机pos值不一样,这时候有两种解决方法,一种是跳过这个错误,一种是手动同步pos值
解决办法一:跳过这个错误
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;就是跳过一次的意思
解决办法
stop slave ;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
start slave;
stop slave;
change master to
master_host='192.168.0.250',master_user='slave',master_password='slavepassword.',
master_log_file='mysql-bin.000049',master_log_pos=310706;
start slave;
show slave status;
找到问题后重新创建主从步骤
# 停止
stop slave;
# 重置
reset slave;
# 创建
CHANGE MASTER TO MASTER_HOST='192.168.0.250', MASTER_USER='slave', MASTER_PASSWORD='slavepassword', MASTER_LOG_FILE='mysql-bin.000041',MASTER_LOG_POS=115774283;
# 启动
start slave;
# 查看状态
show slave status;
Comments NOTHING