MySQL运维实战(7)建立复制

俊达1年前技术文章420

建立复制的基本步骤

1、主库开启binlog

主库需要配置的关键参数

server_id:主备库需要设置为不同。

log_bin:binlog文件的前缀,可以指定绝对路径,也可以只指定文件名。若不指定路径,binlog默认存放在datadir指定的路径下。

binlog_format:可设置为STATEMENT、MIXED、ROW这几种模式。一般建议使用ROW模式。

server_id=100
log_bin=/data/mysql5.6/binlog/binlog
binlog_format=ROW

# log_slave_updates=ON

上述参数中,log_bin不能动态修改。需要重启mysql才能生效。


使用show global variables确认主库binlog已经开启:

mysql> show global variables like 'log_bin%';
| log_bin                                 | ON                                 |
| log_bin_basename                        | /data/mysql5.6/binlog/binlog       |
| log_bin_index                           | /data/mysql5.6/binlog/binlog.index |


使用show binary logs命令查看主库binlog列表:

mysql> show binary logs;
+---------------+-----------+
| Log_name      | File_size |
+---------------+-----------+
| binlog.000001 |       120 |
+---------------+-----------+
1 row in set (0.00 sec)


2、主库创建复制账号(满足基本权限要求)

主库需要创建一个复制账号,备库需要使用复制账号连接到主库,获取binlog。

mysql> create user 'rep'@'%' identified by 'rep123';
Query OK, 0 rows affected (0.00 sec)

mysql> grant  replication slave on *.* to 'rep'@'%';
Query OK, 0 rows affected (0.00 sec)


复制账号需要的权限:replication slave。


3、备库参数配置

备库上必须设置的参数server_id,server_id的值需要和主库设置成不一样。

server_id=236


其他binlog参数可以不设置,或者和主库设置成一样。

备库开启binlog和log_slave_updates后,会将从主库上复制过来的事务也记录到binlog,在创建级连复制时,需要这么配置。

log_slave_updates=ON
log_bin=/data/mysql5.6/binlog/binlog
binlog_format=ROW


4、备库初始化


备库数据准备,需要满足条件:

  • 备库数据是主库数据在过去某个时间点的快照

  • 从那个时间点开始的binlog都存在

我们可以使用备份(如percona开源的xtrabackup,或mysqldump)等工具创建主库的一致性备份,将恢复到备库中,然后再开启复制。

如果主备库都是新初始化的数据库实例,主库binlog没有缺失,则可以略过数据库备份和恢复这一个步骤,直接开启复制。


mysqldump备份数据

这里使用mysqldump进行备份:

/opt/mysql5.7/bin/mysqldump -uroot -h127.0.0.1 -P3357 -pabc123 --all-databases \
 --master-data=2 --routines --flush-privileges --triggers --events > /tmp/mysql57_dump.sql


mysqldump参数说明:

  • --all-databases --routines --triggers --events:备份所有数据库,包括存储过程、触发器、定时事件

  • --master-data=2:记录数据库当前binlog位点。指定master-data后,后自动加上lock-tables选项,锁定数据库,除非同时加上--single-transaction。

  • --single-transaction:使用innodb的一致性读取机制实现一执行数据库备份,不锁表。但是对非InnoDB引擎(如MyISAM)无效。同时备份过程中不能有DDL。

  • --flush-privileges:备份完mysql数据库后,加上flush privileges命令。数据恢复时,恢复完mysql数据库后就会执行flush privileges命令,恢复出来的用户信息才会生效。

  • --gtid-mode=auto:如果数据库开启了GTID,则备份文件中会加入set global GTID_PURGED=xxx;



mysqldump数据恢复

到目标实例执行:

mysql -uroot -h127.0.0.1 -P3357 -pabc123 
source mysql57_dump.sql


注意,执行source前,确认登陆了正确的数据库。如果登陆到主库执行恢复操作,则会引起主库数据丢失。



5、备库创建复制通道

在备库上使用change master命令建立复制信息,这里指定从主库binlog.000001文件头部开始复制(master_log_pos没有指定时,从binlog文件头部复制)。

change master to master_host='172.16.121.234',master_port=3356,master_user='rep',
master_password='rep123',master_log_file='binlog.000001';


start slave;

show slave status\G

位点从备份文件中找:

# head -30 /tmp/mysql57_dump.sql | grep 'CHANGE MASTER'
-- CHANGE MASTER TO MASTER_LOG_FILE='binlog.000006', MASTER_LOG_POS=608;


相关文章

MySQL运维实战(1.1)安装部署:使用RPM进行安装部署

MySQL运维实战(1.1)安装部署:使用RPM进行安装部署

我们在生产环境部署mysql时,一般很少使用rpm。用rpm或或者其他包管理器安装mysql,好处是安装简单,而且很多系统可能都自带了某个版本的mysql。但是使用RPM安装也存在一些缺点:1、rpm...

MySQL优化器特性(二)MRR优化

MySQL优化器特性(二)MRR优化

Index Range Scan索引范围扫描的一般步骤:1、根据where条件,从B+树定位到第一条记录。2、从索引页子节点中获取到行号(rowid),根据rowid回表查询数据。3、使用额外的whe...

MySQL运维实战之备份和恢复(8.1)xtrabackup全量备份

xtrabackup是percona开源的mysql物理备份工具。xtrabackup 8.0支持mysql 8.0版本的备份和恢复。xtrabackup 2.4支持mysql 5.7及以下版本的备份...

MySQL运维实战之ProxySQL(9.4)proxysql和后端MySQL自动切换

MySQL运维实战之ProxySQL(9.4)proxysql和后端MySQL自动切换

如上图架构,当后端MySQL主库出现问题,发生主备切换后,如何自动将ProxySQL的读写切换到新的主库上?可以通过mysql_replication_hostgroups表配置实现:insert&n...

MySQL运维实战(2.3)MySQL的权限体系和一个例子

mysql权限按授权范围分为3大类全局权限。全局权限是用于管理系统模块的权限。跟具体的数据库或对象无关。授权时需要指定为*.*数据库权限对象权限对于具体的数据库对象的权限,如表、字段级别的权限。MyS...

MySQL运维实战(3.1) MySQL官方客户端使用介绍

mysql是mysql安装包默认的客户端。位于二进制安装包的bin目录。或者通过rpm安装包安装mysql-community-client。使用mysql程序linux终端下,输入mysql命令登陆...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。