MENU

mysql高可用 - 主从同步

查看mysql当前连接数

mysqladmin  processlist
#查看当前所有连接
mysqladmin  status
#只查看当前连接数(Threads就是连接数.)
show variables like 'server_id';
#查看两台主机id
locate auto.cnf
rm auto.cnf
#从库auto.cnf文件会产生新的UUID

master主数据库 (10.4.230.208)

配置文件

[mysqld]
log-bin=mysql-bin 
#开启二进制日志
server-id=1
#设置server id

log-bin=mysql-bin
#开启二进制日志
binlog-format=MIXED
#binlog格式
max_binlog_size = 1024M
#bin log 保存文件大小

#log-slave-updates=1 #从库启用binlog需要开启

expire-logs-days = 7
#保留log文件几天
sync-master-info=1
#启用确保无信息丢失

binlog-ignore-db = mysql
binlog-ignore-db = information_schema
binlog-ignore-db = performance_schema
#忽略同步的库

master 命令

CREATE USER 'repl'@'10.4.230.207' IDENTIFIED BY 'slavepass';
#创建用户
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.4.230.207';
#分配权限

flush privileges;
#刷新权限

**锁库和释放 **

flush tables with read lock;
#该处是锁定为只读状态,语句不区分大小写
unlock tables
#释放库

查看master状态

show master status;
#获取当前log文件和pos数值

备份指定库
nohup bash backup.sh

#!/bin/bash

/usr/bin/mysqldump -uroot -p'xXXX   --databases   xxdb,yydb  --master-data=1 --events --triggers --routines  > /home/backup/tmp/20180817-dbbackup

echo 'ok' > /home/backup/tmp/done.txt
echo 'done'

基于pos的从库

mysqldump --all-databases --single-transaction --master-data=1 --triggers --routines --events --host=127.0.0.1 --port=3301 --user=root --password=123 > dump3301.sql
#--single-transaction这个一般都会加上,锁的时间比较短
head -22 /home/backup/tmp/20180817-dbbackup
# --master-data=1  输出binlog 位置

slave 从数据库 (10.4.230.207)

配置文件

[mysqld]
server-id=2 #设置server-id,必须唯一

导入数据

mysql < backup.sql

重启mysql

CHANGE MASTER TO
MASTER_HOST='10.4.230.208',
MASTER_USER='repl',
MASTER_PASSWORD='slavepass',
MASTER_LOG_FILE='mysql-bin.000005',
MASTER_LOG_POS=73;

启动slave同步进程

start slave;
# 启动slave  ;

#reset slave 重新配置; 删除 mysql-relay-bin.xx

查看slave状态

show slave status\G

正常返回:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

MASTER指定同步库

  • 1 忽略库
# 不同步哪些数据库
binlog-ignore-db = mysql
binlog-ignore-db = test
binlog-ignore-db = information_schema
  • 2 指定库
# 只同步哪些数据库,除此之外,其他不同步
binlog-do-db = live

故障切换

查看从库的同步状态

show processlist\G

自动切换:

当机后选举一台从库来当主库

手动到切换:

stop slave ;
# 停止同步
reset master;
# 重置master
  • 删除目录文件里面的master.info 和 relay-bin。
  • 取消read-only设置,确认bin-log是否开启。
  • 重启数据库。
  • 应用修改连接ip

实际问题

Slave_IO_Running: no
检查账号密码和 iptables

Slave_SQL_Running: no
mysqldump备份只导出部分库,我采用手动建库导入master 表结构

slave数据不一致处理过程为

1. 先停止slave
mysql>stop slave;

2. 跳过slave上的1个错误
mysql>set  global sql_slave_skip_counter=1;

3.在slave上手工插入一条数据
mysql>insert into  ...

4.启动slave
mysql>start slave;
Tags: None
Archives QR Code
QR Code for this page
Tipping QR Code
Leave a Comment