背景描述
将 CDB 实例的物理备份恢复到自建的 MySQL 数据库
实验环境
CDB 实例: cdb-fopx6fXX
云服务器: 用于恢复 CDB 的物理备份
如下是 CDB 控制台可以看到的实例中存在的数据库
1, 首先建议先手动备份 CDB 或在控制台下载物理备份文件
[注意: CDB 的默认备份方式为逻辑备份, 但是如果数据量特别大, 逻辑备份的恢复速度比较慢]
2, 在云服务器上面创建数据库的存放目录
- [root@VM_35_215_centos ~]#mkdir -p /data/MySQL/mysql_3310/{
- data,log,tmp
- }
- [root@VM_35_215_centos ~]# ll /data/MySQL/mysql_3310/
- total 12
- drwxr-xr-x 2 root root 4096 Oct 30 18:18 data
- drwxr-xr-x 2 root root 4096 Oct 30 18:18 log
- drwxr-xr-x 2 root root 4096 Oct 30 18:18 tmp
3, 在云服务器上面通过 wget 下载物理备份文件
[root@VM_35_215_centos xtrabackupfile]# wget 'http://sh.dl.cdb.tencentyun.com:xxxxx/a789e231970810651239e2c2fd18b128?appid=1251123904&time=1540900309&sign=NRXQWiNJqtICXGlLpMR2w/s7J5I='
4, 解压物理备份文件
[root@VM_35_215_centos xtrabackupfile]# tar xf a789e231970810651239e2c2fd18b128\?appid\=1251123904\&time\=1540900309\&sign\=NRXQWiNJqtICXGlLpMR2w/s7J5I\=
5, 解压后可以看到一个文件夹, 该文件夹下面即是 CDB 数据库的物理文件
- [root@VM_35_215_centos xtrabackupfile]# ll
- drwxr-xr-x 40 root root 4096 Oct 30 19:49 cdb-fopx6fXX_20181030194849
- [root@VM_35_215_centos cdb-fopx6f6v_20181030194849]# ll
- total 124332
- ........(此处省略 N 行)
- drwxr-x--- 2 root root 4096 Oct 30 19:48 along_bak
- drwxr-x--- 2 root root 12288 Oct 30 19:49 AWS
- -rw-r----- 1 root root 419 Oct 30 19:49 backup-my.cnf
- drwxr-x--- 2 root root 4096 Oct 30 19:49 ceshi
- drwxr-x--- 2 root root 4096 Oct 30 19:48 ceshi2
- drwxr-x--- 2 root root 4096 Oct 30 19:49 ceshi2_bak
- drwxr-x--- 2 root root 4096 Oct 30 19:49 ceshi_bak
- drwxr-x--- 2 root root 4096 Oct 30 19:49 congshao
- drwxr-x--- 2 root root 4096 Oct 30 19:49 daxie
- drwxr-x--- 2 root root 4096 Oct 30 19:48 DAXIE
- ........(此处省略 N 行)
- -rw-r----- 1 root root 79691776 Oct 30 19:49 ibdata1
- -rw-r----- 1 root root 12582912 Oct 30 19:49 ibtmp1
- drwxr-x--- 2 root root 4096 Oct 30 19:49 liujian
- drwxr-x--- 2 root root 4096 Oct 30 19:48 MySQL
- drwxr-x--- 2 root root 4096 Oct 30 19:49 performance_schema
- drwxr-x--- 2 root root 4096 Oct 30 19:49 shaocong
- ........(此处省略 N 行)
- -rw-r----- 1 root root 26214400 Oct 30 19:49 undo001
- -rw-r----- 1 root root 118 Oct 30 19:49 xtrabackup_binlog_info
- -rw-r--r-- 1 root root 28 Oct 30 19:49 xtrabackup_binlog_pos_innodb
- -rw-r----- 1 root root 376 Oct 30 19:49 xtrabackup_cdb_result
- -rw-r----- 1 root root 121 Oct 30 19:49 xtrabackup_checkpoints
- -rw-r----- 1 root root 810 Oct 30 19:49 xtrabackup_info
- -rw-r----- 1 root root 8388608 Oct 30 19:49 xtrabackup_logfile
- -rw-r----- 1 root root 156 Oct 30 19:49 xtrabackup_slave_info
从物理备份文件中可以看到有如上的一些以 xtrabackup 开头的一些文件
xtrabackup_checkpoints 记录备份完成时检查点的 lsn 号和该备份文件类型, full-backuped 全量备份
xtrabackup_binlog_info 记录二进制日志和偏移量, 若开启 gtid, 还会记录 gtid 位置, 为在线搭建从库做准备
xtrabackup_info 记录备份详细信息, 如备份命令, 开始结束时间, 版本等
6, 将数据库的物理备份文件移动到步骤 2 创建的数据文件存放目录中
[root@VM_35_215_centos xtrabackupfile]#mv cdb-fopx6f6v_20181030194849/ /data/MySQL/mysql_3310/data
由于是多实例部署, 所以使用了 mysqld_multi 统一管理, 如果是单实例的可忽略配置文件中 [mysqld_multi] 的设置
7, 修改备份文件的属性
[root@VM_35_215_centos ~]# chown -R MySQL:MySQL /data/MySQL/mysql_3310/
8, 编辑 MySQL 的配置文件, 或者按照腾讯云官方文档修改备份文件中的 backup-my.cnf 配置文件
- [root@VM_35_215_centos ~]# VIM /etc/my.cnf
- [mysqld_multi]
- user=root
- pass=XXXXXX
- mysqld=/usr/local/MySQL/bin/mysqld_safe
- mysqladmin=/usr/local/MySQL/bin/mysqladmin
- log=/data/MySQL/mysqld_multi.log
- [mysqld]
- #skip-grant-tables
- user=MySQL
- basedir = /usr/local/MySQL
- sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
- max_allowed_packet = 16M
- character_set_server = utf8mb4
- [mysqld3310]
- #skip-grant-tables
- mysqld=mysqld
- mysqladmin=mysqladmin
- datadir=/data/MySQL/mysql_3310/data/
- socket=/tmp/mysql3310.sock
- port=3310
- server_id=3310
- log-output=file
- slow_query_log = 1
- long_query_time = 1
- slow_query_log_file = /data/MySQL/mysql_3310/log/slow.log
- log-error = /data/MySQL/mysql_3310/log/error.log
- binlog_format = mixed
- log-bin = /data/MySQL/mysql_3310/log/mysql3310.bin
- secure_file_priv=/tmp
- gtid-mode = ON
- enforce-gtid-consistency = ON
- log-slave-updates = ON
- query_cache_size=0
- query_cache_type=1
9, 启动实例
- [root@VM_35_215_centos ~]# mysqld_multi start 3310
- [root@VM_35_215_centos ~]# mysqld_multi report 3310
- Reporting MySQL servers
- MySQL server from group: mysqld3310 is running
启动成功
10, 登录实例, 发现登录出现如下的报错, 看样子是用户密码有问题
- [root@VM_35_215_centos ~]# MySQL -u root -p -S /tmp/mysql3310.sock
- Enter password:
- ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
11, 在配置文件中增加如下内容, 登录的时候跳过 user 表检
- [mysqld3310]
- skip-grant-tables
12, 然后重启一下实例即可登录成功
- [root@VM_35_215_centos ~]# mysqld_multi start
- [root@VM_35_215_centos ~]#mysqld_multi report 3310
- Reporting MySQL servers
- MySQL server from group: mysqld3310 is running
13, 登录成功后, 修改一下 root 用户的密码
- root@ [(none)]>update MySQL.user set password=password('qcloud@2018') where user='root';
- Query OK, 5 rows affected, 1 warning (0.05 sec)
- Rows matched: 5 Changed: 5 Warnings: 1
14, 关闭 MySQL 服务, 然后删掉配置文件中的 skip-grant-tables 重新进行登录
至此通过 CDB 物理备份恢复数据库全部完成;
来源: https://www.qcloud.com/developer/article/1365489