1.概述
由于业务需求,公司需要本地搭建自有MySQL数据库,然而数据需要使用线上数据库的数据作为数据基础,线上数据库是使用的腾讯云产品,所以需要从腾讯云MySQL上的数据导入至本地数据库。
2.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
# tar -xf mysql-5.6.50.tar.gz
# cd mysql-5.6.50
# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DSYSCONFDIR=/etc -DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
# make
# make install
# echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
# source /etc/profile
# mkdir -p /data/mysql/
# useradd mysql
# chown -R mysql:mysql /data/mysql/
# cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
# vim /etc/my.cnf
[client]
port=3306
socket=/tmp/mysql.sock
datadir = /data/mysql
skip-external-locking
key_buffer_size = 32M
[mysqld]
skip-grant-tables #第一次启动MySQL需要启动,免密登录修改root修改密码后注释点重启
wait_timeout=3600
max_allowed_packet = 200M
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
explicit_defaults_for_timestamp = true
max_connections = 1000
max_connect_errors = 100
open_files_limit = 65535
log-bin=mysql-bin
binlog_format=mixed
server-id = 1
expire_logs_days = 10
default_storage_engine = InnoDB
innodb_file_per_table = 1
innodb_data_home_dir = /data/mysql/
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /data/mysql/
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 = 16M
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 32M
sort_buffer_size = 768K
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
# /usr/local/mysql/scripts/mysql_install_db \
--basedir=/usr/local/mysql/ \
--datadir=/data/mysql/ \
--defaults-file=/etc/my.cnf
# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
# mysql -uroot -p
mysql> set password for root@'localhost'=password(******');
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
数据库搭建基本完成。
3.登录腾讯云MySQL
登录腾讯云MySQL控制台,如下图:
选择相应的数据库实例,选择备份恢复,如下图,然后进行数据下载,这个是一个漫长的下载过程,也是考验网速的时候,好在只有几十个G:
下载完成就是把下载好的数据上传至相应的MySQL服务器上,这个也是一个考验网速的时刻,上传完成后,把这么大的数据上传至服务器,采用rz是无法上传的,我采用的是filezilla,注意线上服务器存放数据的权限。这个上传速度是贼慢的,40G大概上传了4个半小时,服务器的带宽开了20M。
4.腾讯云自建数据库恢复数据
需要如下工具进行数据解压:
percona-xtrabackup-2.3.5-1.el7.x86_64.rpm #这个对应的是mysql-5.6
percona-toolkit-3.1.0-2.el7.x86_64.rpm
qpress-11-linux-x64.tar #qpress命令解压出 qpress 二进制文件
# yum -y install percona-xtrabackup-2.3.5-1.el7.x86_64.rpm
# yum -y install percona-toolkit-3.1.0-2.el7.x86_64.rpm
# tar -xf qpress-11-linux-x64.tar -C /usr/local/bin
# source /etc/profile
使用 xbstream 命令将备份文件解包到目标目录
# xbstream -x -C db1 < ****_backup_20201230000303.xb
使用如下命令将目标目录下所有以.qp结尾的文件都解压出来
# xtrabackup --decompress --target-dir=db1
备份解压出来之后,执行如下命令进行 apply log 操作
# xtrabackup --prepare --target-dir=db1
由于存在的版本问题,请将解压文件backup-my.cnf中如下参数进行注释
# vim /data/db1/backup-my.cnf
# This MySQL options file was generated by innobackupex.
# The MySQL server
[mysqld]
#innodb_checksum_algorithm=innodb
#innodb_log_checksum_algorithm=innodb
innodb_data_file_path=ibdata1:12M:autoextend
innodb_log_files_in_group=2
innodb_log_file_size=1073741824
#innodb_fast_checksum=false
#innodb_page_size=16384
#innodb_log_block_size=512
innodb_undo_directory=.
innodb_undo_tablespaces=0
server_id=0
#redo_log_version=0
修改文件属性,并检查文件所属为 mysql 用户
# chown -R mysql:mysql /data/db1
启动 mysqld 进程
# mysqld_safe --defaults-file=/data/db1/backup-my.cnf --user=mysql --datadir=/data/db1 &
#将数据目录下的数据拷贝至数据库存放目录下:
# mv /data/db1 /data/mysql
# chown -R mysql:mysql /data/mysql
重启数据库
# /etc/init.d/mysql start
特别注意的点:
由于这个三个库也是腾讯云MySQL中拷贝过来的,所以之前线上的数据库账号是可以直接使用的,但刚刚开始创建数据库的密码就无法使用。
以上这种腾讯云MySQL数据导入自建腾讯云主机上MySQL的方式,是不怎么推荐使用的。