1、概述

    在实际运维过程中,服务器资源并不是我们想象的那么充足,在测试环境经常是单主机跑多套MySQL实例,并且还有很多时候,还得测试一些主从同步问题,还得做一些主从同步的关系,本文主要讲述通过innobackupex工具进行MySQL数据备份和恢复,进行主从关系搭建。单机多实例可以参考以下文档:​​单机MySQL多实例​


2、MySQL备份数据

      首先应该从主库中(多实例3306)导出所有的数据,由于本人比较熟悉innobackupex工具,所以采用innobackupex工具进行数据备份,工具安装方式可以参考:​​innobackupex工具​

       当然在备份数据,首先应该考虑是需要足够的磁盘空间,由于公司是测试环境,数据就是大概30G左右,而测试环境硬盘空间也是足够了。

       全量备份数据命令如下:

innobackupex  --user=root --host='127.0.0.1'  --port=3306 --password='密码' /data/tmp/
  • --user:表示用户
  • --host:表示IP
  • --port:表示端口
  • --password: 表示密码
  • /data/tmp/:存放备份的目录
  • 特别注意:xtrabackup_binlog_pos_innodb,存放的是主库备份的binlog的文件名和pos点,在初始化从库会使用上的。
  • 更多命令详情通过 ​innobackupex  --help

【MYSQL】单机MySQL多实例主从同步_多实例

以上操作静静等待几分钟就完成了全量数据备份操作


3、MySQL数据恢复

     在数据恢复至从库中(多实例3307中),在使用恢复命令使用通过制定配置来实现指定数据恢复目录,那么由于我们公司之前在创建实例时,考虑不够全面,所有的配置文件都写到了/etc/my.cnf,那么如果我们制定这个文件的话,那肯定会读到3306数据的数据目录,这样子数据就会有覆盖的风险,最后我们应该怎么解决这个问题呢,可以新建一个配置文件并且指定3307的数据工作目录,如下/etc/my_3307.cnf:

          特别注意mysqld、mysqldump、mysql等后面不要加3306或3307之类的,否则无法导入数据

[mysqld]  

mysqld=mysqld
mysqladmin=mysqladmin
datadir=/data/db/mysql_3307/data
port=3307
server_id=3307
socket=/tmp/mysql_3307.sock
log-output=file
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /data/db/mysql_3307/log/slow.log
log-error = /data/db/mysql_3307/log/error.log
binlog_format = mixed
log-bin = /data/db/mysql_3307/log/mysql3307_bin

innodb_file_per_table = 1
innodb_data_file_path = ibdata1:10M:autoextend
innodb_buffer_pool_size = 128M
innodb_log_file_size = 32M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

[mysqldump]
quick
max_allowed_packet = 1024M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 32M
sort_buffer_size = 768K
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

通过--apply-log回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态

innobackupex --defaults-file=/etc/my_3307.cnf --use-memory=2G --apply-log /data/tmp/2022-03-29_11-29-38

将备份数据文件拷贝到MySQL服务器的datadir

innobackupex --defaults-file=/etc/my_3307.cnf --copy-back  /data/tmp/2022-03-29_11-29-38/

对数据库目录进行授权

chmod 755 -R /data/db/mysql_3307/data
chown mysql.mysql -R /data/db/mysql_3307/data

4、MySQL主从配置

在主库3306端口创建主从同步账号

mysql>grant replication slave on *.* to 'repo'@'%' identified by 'JkjdhfdshfkheY@dsjfl';
mysql>flush privileges;

在从库3307端口设置同步

mysql> stop slave;
mysql> change master to master_host='172.16.32.16',master_port=3306,master_user='repo',master_password='JkjdhfdshfkheY@dsjfl',master_log_file='mysql3306_bin.000048',master_log_pos=2208937;
mysql> start slave;
mysql> show slave status\G;

【MYSQL】单机MySQL多实例主从同步_多实例_02

以上所有的配置就完成。