1、概述
在日常开发工作中,虽然现在基本上都是云上服务,但是在开发测试环境中,很多都是自建服务,如MySQL,Redis等。那在实际工作中,也渴望在开发测试环境得到更多的数据,用于更加有效、准确进行功能的测试。那么一般处理方式,通过生产环境的数据导入到开发测试环境中,在腾讯云中,全量从云数据库导入CVM自建数据库无法使用DTS直接导入,那么只能使用最原始的方式:
- 下载腾讯云的冷备
- 上传至相应的CVM
- 通过xtrabackup解压
- 将物理备份拷贝至mysql存放目录
2、自建MySQL
由于在使用MySQL过程中,不能影响开发者对数据库的使用,那么可以通过重新编译一个MySQL程序,开启一个新的端口用来启动一个新的数据库,从不间断使用。
安装基础依赖
# yum -y install gcc gcc-c++ autoconf bison cmake zlib* fiex* libxml* ncurses-devel libmcrypt* libtool-ltdl-devel* automake openssl openssl-devel pcre pcre-devel
编译MySQL
# mysql-5.6.50.tar.gz
# cd mysql-5.6.50
# cmake -DCMAKE_INSTALL_PREFIX=/data1/db/mysql -DINSTALL_DATADIR=/data1/db/data -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DWITH_SSL=yes -DWITH_EMBEDDED_SERVER=1 -DENABLED_LOCAL_INFILE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DMYSQL_UNIX_ADDR=/data1/db/run/mysql.sock -DMYSQL_TCP_PORT=3307 -DENABLED_LOCAL_INFILE=1 -DSYSCONFDIR=/data1/db/etc -DWITH_READLINE=on
# make && make install
新建目录
mkdir -p /data1/db/{etc,data,run,log,tmp,data}
配置文件
[client]
port=3307
socket=/data1/db/run/mysql.sock
[mysqld]
basedir=/data1/db/mysql
datadir=/data1/db/data
pid_file=/data1/db/run/mysqld.pid
port=3307
server_id=102
socket=/data1/db/run/mysql.sock
tmpdir=/data1/db/tmp
binlog_format=ROW
skip-external-locking
key_buffer_size = 32M
wait_timeout=3600
max_allowed_packet = 1000M
table_open_cache = 128
sort_buffer_size = 768K
net_buffer_length = 8K
read_buffer_size = 768K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
thread_cache_size = 16
query_cache_size = 16M
tmp_table_size = 32M
performance_schema_max_table_instances = 500
# 慢查询开启
slow_query_log = on
long_query_time= 2
explicit_defaults_for_timestamp = true
max_connections = 1000
max_connect_errors = 100
open_files_limit = 65535
sql_mode=NO_ENGINE_SUBSTITUTION
default_storage_engine = InnoDB
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 = 1000M
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 32M
sort_buffer_size = 768K
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
[mysqld_safe]
log-error=/data1/db/log/mysqld.log
datadir=/data1/db/data
设置启动
# /etc/init.d/mysqld_3307 sta
3、导入数据
这里首先需要下载数据库中的冷备,可以通过腾讯云的内网地址下载到相应的服务器上,但是有一个点切记,先在腾讯云CVM主机的相关区域按需购买一张临时盘,用来临时存放数据,比如:腾讯云冷备是300G,预计准备800-900G左右临时盘使用,按需费用大概是1.02元一个小时。
安装xbstrem命令
# tar -xf qpress-11-linux-x64.tar -C /usr/local/bin
# source /etc/profile
# mkdir db1
使用 xbstream 命令将备份文件解包到目标目录
# xbstream -x -C db1 < ****_backup_20201230000303.xb
使用如下命令将目标目录下所有以.qp结尾的文件都解压出来
# xtrabackup --decompress --target-dir=db1
备份解压出来之后,执行如下命令进行 apply log 操作
# xtrabackup --prepare --target-dir=db1
删除.qp结尾的文件
# cd db1
# ll *.qp | xargs rm -rf
将db1目录下的数据拷贝至/data1/db/data目录,记得/data1/这个目录下有充足的磁盘空间
# cp -r db1/* /data1/db/data/
# chown mysql.mysql -R /data1/db/data/
重启MySQL
# /etc/init.d/mysqld_3307 start