美文网首页
Mysql主从和故障

Mysql主从和故障

作者: Odven | 来源:发表于2020-06-07 20:57 被阅读0次

1) 搭建传统的mysql主从

(1) 主上面的操作
# 配置文件
cat > /etc/mysqld3380.cnf <<EOF
[mysqld]
user = mysql
bind-address = 0.0.0.0
port = 3380
basedir = /opt/mysql_process/mysql
datadir = /data/mysql/3380/data
socket = /data/mysql/3380/pid/mysqld.sock
pid-file = /data/mysql/3380/pid/mysqld.pid
log_error = /data/mysql/3380/log/error.log
# 开启双一操作
sync_binlog = 1
innodb_flush_log_at_trx_commit = 1
# 搭建主从
server_id = 50 
log_bin = /data/mysql/3380/log/mysql_bin
binlog_format = row
[mysql]
socket = /data/mysql/3380/pid/mysqld.sock
EOF

# 创建用户并设置权限
create user repl@"192.168.137.%" identified by "123";  
grant replication slave on *.* to repl@"192.168.137.%";
show grants for repl@"192.168.137.%";  # 查看权限 

# 备份数据
mysqldump -S /data/mysql/3380/pid/mysqld.sock --master-data=2 --triggers -E -R --single-transaction -A > full.sql

(2) 从上面的操作
# 配置文件
cat > /etc/mysqld3381.cnf << EOF
[mysqld]
user = mysql
bind-address = 0.0.0.0
port = 3381
basedir = /opt/mysql_process/mysql
datadir = /data/mysql/3381/data
socket = /data/mysql/3381/pid/mysqld.sock
pid-file = /data/mysql/3381/pid/mysqld.pid
log_error = /data/mysql/3381/log/error.log
# 开启双一操作
sync_binlog = 1
innodb_flush_log_at_trx_commit = 1
# 搭建主从
server_id = 100 
log_bin = /data/mysql/3381/log/mysql_bin
binlog_format = row
[mysql]
socket = /data/mysql/3381/pid/mysqld.sock
EOF

# 导入数据
mysql -S /data/mysql/3381/pid/mysqld.sock < full.sql

# 查看备份文件找到binlog文件名和position(大概在22行的位置)
head -30 full.sql
......
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql_bin.000001', MASTER_LOG_POS=1940;
......
# 进入数据库执行CHANGE MASTER TO XXX语句就会把主的信息写入master.info文件中
CHANGE MASTER TO
MASTER_HOST='192.168.137.50',
MASTER_USER='repl',
MASTER_PASSWORD='123',
MASTER_PORT=3380,
MASTER_LOG_FILE='mysql_bin.000001',
MASTER_LOG_POS=1940,
MASTER_CONNECT_RETRY=10;

# 启动从的线程
start slave;

# 查看主从启动成功没有
show slave status\G;
......
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
......
如果是Yes表示成功

2) 搭建GTID的mysql主从(建议使用基于GTID来搭建主从)

(1) 主上面的操作
# 配置文件
cat > /etc/mysqld3380.cnf <<EOF
[mysqld]
user = mysql
bind-address = 0.0.0.0
port = 3380
basedir = /opt/mysql_process/mysql
datadir = /data/mysql/3380/data
socket = /data/mysql/3380/pid/mysqld.sock
pid-file = /data/mysql/3380/pid/mysqld.pid
log_error = /data/mysql/3380/log/error.log
# 开启双一操作
sync_binlog = 1
innodb_flush_log_at_trx_commit = 1
# 启动binlog
server_id = 50 
log_bin = /data/mysql/3380/log/mysql_bin
binlog_format = row
# 启动GTID
gtid-mode = on
enforce-gtid-consistency = true
log-slave-updates = 1
[mysql]
socket = /data/mysql/3380/pid/mysqld.sock
prompt=M [\\d]>
EOF

# 创建用户并设置权限
create user repl@"192.168.137.%" identified by "123";  
grant replication slave on *.* to repl@"192.168.137.%";
show grants for repl@"192.168.137.%";  # 查看权限 

# 备份数据
mysqldump -S /data/mysql/3380/pid/mysqld.sock --master-data=2 --triggers -E -R --single-transaction -A > full.sql

(2) 从上面的操作
# 配置文件
cat > /etc/mysqld3381.cnf << EOF
[mysqld]
user = mysql
bind-address = 0.0.0.0
port = 3381
basedir = /opt/mysql_process/mysql
datadir = /data/mysql/3381/data
socket = /data/mysql/3381/pid/mysqld.sock
pid-file = /data/mysql/3381/pid/mysqld.pid
log_error = /data/mysql/3381/log/error.log
# 开启双一操作
sync_binlog = 1
innodb_flush_log_at_trx_commit = 1
# 启动binlog
server_id = 100 
log_bin = /data/mysql/3381/log/mysql_bin
binlog_format = row
#  启动GTID
gtid-mode = on
enforce-gtid-consistency = true
log-slave-updates = 1
[mysql]
socket = /data/mysql/3381/pid/mysqld.sock
prompt=M [\\d]>
EOF

# 导入数据
mysql -S /data/mysql/3381/pid/mysqld.sock < full.sql

# 进入数据库执行CHANGE MASTER TO XXX语句
CHANGE MASTER TO
MASTER_HOST='192.168.137.50',
MASTER_USER='repl',
MASTER_PASSWORD='123',
MASTER_PORT=3380,
MASTER_AUTO_POSITION=1;

# 启动从的线程
start slave;

# 查看主从启动成功没有
show slave status\G;
......
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
......
如果是Yes表示成功

3) IO线程故障

# 从主上分析
1. binlog 被破坏
2. 执行了reset master;
3. 可能开启了防火墙限制,selinux
4. 连接数达到上限(增加连接数  set global max_connections=300;)
......

# 从从上分析 
1. 写错了主的user或password或log_file或log_pos等
2. 可能开启了防火墙限制, selinux
......

4) SQL线程故障

1. relay_log被损坏,删除等
2. 在从库上面做了写操作等(show variables like '%read_only%'; 在配置文件添加read_only=1 或者再加上super_read_only=1)
.....

5) 主从延时

# 从主上分析
1. 有大的事物或并发事务量大
2. 有大的IO(自己都忙不过来,没空理会dump线程)
......
# 从从上分析
1. SQL线程值开启单线程
2. 很大的并发事物或大事物
3. 主从服务器性能差很多
4. 索引的差异
......

6) 查看问题和解决方法

1. show slave status\G;  查看具体的错误信息,然后做相应的处理
......
Last_IO_Errno: 0
Last_IO_Error:
......
2. 查看防火墙,网络
3. 在从上直接用同步的用户连接主
4. 查看binlog文件和位置等
5. change master to xxx
    stop  slave;  
    reset slave all; 
    change master to xxx;
    start slave;
6. 跳过错误
    stop slave; 
    set global sql_slave_skip_counter = 1;
    start slave;
    或
    /etc/my.cnf
    # 1007:对象已存在, 1032:要执行的对象不存在,无法执行DML, 1062:主键冲突,或约束冲突
    slave-skip-errors = 1032,1062,1007
7. 重新做主从
8. 使用基于GTID的主从(这样可以使DUMP_T多并发,开启多个SQL_T进行多并发)

相关文章

  • Mysql主从和故障

    1) 搭建传统的mysql主从 2) 搭建GTID的mysql主从(建议使用基于GTID来搭建主从) 3) IO线...

  • mysql主从复制架构

    为什么要设计mysql主从复制架构 为了解决mysql中出现单点故障的问题,进而设计了mysql主从架构,保障整体...

  • mysql高可用性之主从复制

    1.主从原理 2.主从用途mysql主从复制用途 实时灾备,用于故障切换 读写分离,提供查询服务 备份,避免影响业...

  • Mysql双主高可用

    1.两台MySQL互为主从2.采用keepalived来实现MySQL的故障转移3.同时只有一台MySQL能进行读...

  • Mycat

    docker 安装mysql主从和mycat mysql主从:https://blog.csdn.net/Amor...

  • MySQL-lesson08-主从复制基础

    MySQL-lesson08-主从复制基础 0.企业高可用性标准 *** 0.1 全年无故障率(非计划内故障停机)...

  • MHA+MySQL主从配置实现MySQL高可用

    前面文章已经介绍了MySQL的安装和主从配置 MySQL安装 MySQL主从配置 主从配置应该只能算是一套容灾方案...

  • MySQL主从同步

    MySQL主从同步(一)——原理详解 一、MySQL主从同步简介 MySQL主从同步,即MySQL Replica...

  • Mycat笔记

    Mycat关键特性: 基于心跳的自动故障切换 支持读写分离,支持Mysql主从 基于NIO实现,有效管理线程,解决...

  • 主从:MySQL设置主从同步基础设置

    MySQL主从同步机制 MySQL主从同步是在MySQL主从复制(Master-Slave Replication...

网友评论

      本文标题:Mysql主从和故障

      本文链接:https://www.haomeiwen.com/subject/rnnozhtx.html