前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql高可用 - 主从同步

mysql高可用 - 主从同步

作者头像
以谁为师
发布2019-05-28 20:26:38
1.8K0
发布2019-05-28 20:26:38
举报
文章被收录于专栏:小网管的运维之路

查看mysql当前连接数

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

master主数据库 (10.4.230.208)

配置文件

代码语言:javascript
复制
[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 命令

代码语言:javascript
复制
CREATE USER 'repl'@'10.4.230.207' IDENTIFIED BY 'slavepass';
#创建用户
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.4.230.207';
#分配权限

flush privileges;
#刷新权限

锁库和释放

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

查看master状态

代码语言:javascript
复制
show master status;
#获取当前log文件和pos数值

备份指定库 nohup bash backup.sh

代码语言:javascript
复制
#!/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的从库

代码语言:javascript
复制
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这个一般都会加上,锁的时间比较短
代码语言:javascript
复制
head -22 /home/backup/tmp/20180817-dbbackup
# --master-data=1  输出binlog 位置

slave 从数据库 (10.4.230.207)

配置文件

代码语言:javascript
复制
[mysqld]
server-id=2 #设置server-id,必须唯一

导入数据

代码语言:javascript
复制
mysql < backup.sql
# 可以直接将master数据目录打包

重启mysql

代码语言:javascript
复制
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同步进程

代码语言:javascript
复制
start slave;
# 启动slave  ;

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

查看slave状态

代码语言:javascript
复制
show slave status\G

正常返回: Slave_IO_Running: Yes Slave_SQL_Running: Yes

MASTER指定同步库

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

从库设置为只读库

/etc/my.cnf

代码语言:javascript
复制
read_only=1
# slave主机上操作
GRANT SElECT ON *.* TO 'username'@'%' IDENTIFIED BY "password";
# master主机上建立普通用户; 程序连从库使用限制为只读

故障切换

查看从库的同步状态

代码语言:javascript
复制
show processlist\G

自动切换:

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

手动到切换:

代码语言:javascript
复制
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数据不一致处理过程为

代码语言:javascript
复制
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;
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018年8月24日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 查看mysql当前连接数
    • master主数据库 (10.4.230.208)
      • slave 从数据库 (10.4.230.207)
        • MASTER指定同步库
        • 从库设置为只读库
        • 故障切换
          • 自动切换:
            • 手动到切换:
            • 实际问题
            相关产品与服务
            云数据库 SQL Server
            腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档