一次生产环境mysql迁移操作(一)数据归档

一次生产环境mysql迁移操作(二)mysql空间释放(碎片整理)

上文中增加了定时归档,现在一些大表磁盘空间一直不释放,导致数据库文件越来越大。现在介绍下数据导入导出方案。

方案选择

暂时有两种方案选择:
1、停机数个小时,使用mysqldump进行备份(大表只最近导出10天的数据)和恢复,并将共享表空间设置为独立表空间
2、mysql使用OPTIMIZE 来进行碎片整理
2、搭建主从集群,记录备份时间点,然后将数据重新导入到从库,最后将从库切换为主库。

经过对比1、2、3,方案一操作简单,比较灵活可以先导入近一天数据,以后的数据慢慢导入,方案二需要锁表,且时间太长,而我们数据库版本是5.5.47且innodb-file-per-table参数没设置,所以不适合该方案,方案三操作比较麻烦,时间也需要很久,经过评估停机时间可以缩短为1小时,最后选择方案1。

实施

前置步骤

1、从我们归档的数据库中导出近期半个月数据。

mkdir -p /mnt/backup/mysql/
cd /mnt/backup/mysql/ mysqldump -uroot -p1 -t --skip-add-locks --single-transaction --quick --databases xxx --tables table1 --where 'clock >1543161600 and clock <=1543939200' >table1_1126-1204.sql
mysqldump -uroot -p1 -t --skip-add-locks --single-transaction --quick --databases xxx --tables table2 --where 'clock >1543161600 and clock <=1543939200' >table2_1126-1204.sql
...
...
...

2、从生产数据库中导出近一天的数据

比如说我们准备12月10升级,这里我们可以提前到处那六张大表的数据,该步骤可以不用停服务,并且不影响数据库正常运行。

mkdir -p /mnt/backup/mysql/
cd /mnt/backup/mysql/ mysqldump -uroot -p1 -t --skip-add-locks --single-transaction --quick --databases xxx --tables table1 --where 'clock >1543939200 and clock <=1544371200' >table1_1205-1209.sql
mysqldump -uroot -p1 -t --skip-add-locks --single-transaction --quick --databases xxx--table2 --where 'clock >1543939200 and clock <=1544371200' >table2_1205-1209.sql
...
...
...

操作步骤

1、停止相关服务

systemctl stop httpd
systemctl stop supervisord
systemctl stop xxx-server.service

2、执行清理脚本

由于这些大表都已经分区,所以清理就只需要保留当天的分区,以前的分区可以都drop掉,由于不同的库清理脚本不一样,所以脚本我这里就不列出来了

3、导出其余表数据

使用mysqldump导出主数据库中除了那6个大表以外的其他所有数据库的数据

mkdir -p /mnt/backup/mysql/
cd /mnt/backup/mysql/
mysqldump -R -uroot -p1 --databases db1 db2alert db3 guacamole --ignore-table=db1.table1 --ignore-table=db1.table2 > mysqldump.sql

备份mysql数据库中的用户和数据库信息

mysqldump -t -uroot -p1 --databases mysql> mysql_info_data.sql

4、使用mysqldump 分别导出 6个大表清理后的数据

cd /mnt/backup/mysql/
mysqldump -uroot -p1 --databases xxx --tables table1 --where 'clock >1544371200' >table1.sql
mysqldump -uroot -p1 --databases xxx --tables table2 --where 'clock >1544371200' >table2.sql
...
...
...

5、删除所有数据库

mysql -uroot -p1 

drop database db1;
drop database db2;
drop database db3;

删除数据/var/lib/mysql下日志文件

systemctl stop mariadb

rm -rf /var/lib/mysql/ib*

#查看空间是否释放
df

6、配置/etc/my.cnf

修改/etc/my.cnf,这里需要将共享表空间设置为独立表空间。
备注:mysql 5.6.7版本后会默认开启独立表空间innodb-file-per-table=on
当前服务现在使用的版本是5.5.47,所以需要在my.cnf中进行配置,而openstack用的是5.6.22所以不用设置。
添加下面一句:

[mysqld]
innodb-file-per-table=1 systemctl start mariadb
mysql -uroot -p1

#查看设置是否生效,如果是on则说明已生效
show variables like '%per_table%';

7、分批导入数据库

cd /mnt/backup/mysql
mysql -uroot -p1 source mysqldump.sql; use db1
source table1.sql;
source table2.sql;
...
...
...

8、验证数据

mysql -uroot -p1

use db1
show table status like 'table1%';

9、重启服务并验证

systemctl start httpd
systemctl start supervisord
systemctl start xxx-server.service

可以说现在服务运行正常了,现在就是慢慢导入历史数据了

后置步骤

导入历史数据

cd /mnt/backup/mysql
mysql -uroot -p1 use db1
source table1_1205-1209.sql;
source table2_1205-1209.sql;
...
...
...

一次生产环境mysql迁移操作(二)mysql空间释放(碎片整理)的更多相关文章

  1. 案例分享 生产环境逐步迁移至k8s集群 - pod注册到consul

    #案例分享 生产环境逐步迁移至k8s集群 - pod注册到consul #项目背景 多套业务系统, 所有节点注册到consul集群,方便统一管理 使用consul的dns功能, 所有节点hostnam ...

  2. MySQL - 日常操作二 备份还原

    登录mysql的命令 # 格式: mysql -h 主机地址 -u 用户名 -p 用户密码 mysql -h 110. -P3306 -uroot -p mysql -uroot -p -S /dat ...

  3. Mysql基础(二):MySQL之存储引擎

    目录 MySQL之存储引擎 1.MySQL存储引擎介绍 2.MySQL结构 3.MySQL存储引擎分类 4.存储引擎的使用 5.总结 MySQL之存储引擎 1.MySQL存储引擎介绍 MySQL中的数 ...

  4. MySQL权限系统(二). MySQL提供的特权 Privileges Provided by MySQL

    MySQL provides privileges that apply in different contexts and at different levels of operation: Adm ...

  5. mysql二进制文件操作语法(mysql binary log operate statements)

    开启 binary logs 功能 在 mysql 配置文件中配置 log-bin,重启 mysql my.cnf (on Linux/unix) or my.ini (on Windows) 例子: ...

  6. 生产环境实践:Cana实现MySQL到ES实时同步

    注:由于文章篇幅有限,完整文档可扫下面二维码免费获取,更有深受好评的大数据实战精英+架构师好课等着你. 速点链接加入高手战队:http://www.dajiangtai.com/course/112. ...

  7. MySQL操作(二)MySQL配置文件

    1.正常安装之后,有安装目录,我的直接安装在默认目录下,即 C:\Program Files\MySQL\MySQL Server 5.7 目录下 而数据存储在 C:\ProgramData\MySQ ...

  8. mysql迁移:ibd表空间迁移库表

    问题描述:将一个库中的表迁移到另一个数据库或实例下,利用ibd文件物理迁移,可适用情况为数据库起不来,强制迁移数据文件恢复 将数据库中的zabbix数据迁移到另一个库中 frm:存储表的列信息 ibd ...

  9. MySQL - 日常操作三 mysql慢查询;

    sql语句使用变量 use testsql; set @a=concat('my',weekday(curdate())); # 组合时间变量 set @sql := concat('CREATE T ...

  10. 生产环境中mysql数据库由主从关系切换为主主关系

    目录 一.清除原从数据库数据及主从关系 1.1.关闭主从数据库原有的主从关系 1.2.清除从数据库原有数据 二.将主库上的数据备份到从库 2.1.备份主库数据到从库 2.2.在从库使用tsc.sql文 ...

随机推荐

  1. MATLAB神经网络工具箱使用介绍

      本文介绍MATLAB软件中神经网络拟合(Neural Net Fitting)工具箱的具体使用方法.   在MATLAB人工神经网络ANN代码这篇文章中,我们介绍了MATLAB软件中神经网络(AN ...

  2. 使用allparis正交法,生成测试用例

    原文:https://www.csdn.net/tags/MtzaggysODU0NTItYmxvZwO0O0OO0O0O.html 介绍工具前先讲下理论知识正交法一般适用于多个输入条件且条件与条件之 ...

  3. Linux命令行配置RIAD5

    环境准备: 系统: redhat6.9 硬盘:300G*3 SAS MegaCli是一款管理维护硬件RAID软件,可以用来查看raid信息等 1. 安装MegaCli rpm -ivh Lib_Uti ...

  4. spring与设计模式之一工厂模式

    大家都说要多阅读spring的代码,这非常在理,毕竟spring的代码是许许多多杰出工程师的结晶,是业界多年的累积. 最近也不是非常忙,所以准备记录一系列的相关代码. 工厂模式是所有人都会的模式,是最 ...

  5. 详解Web应用安全系列(5)敏感数据泄露漏洞

    在最近几年,这是最常见的,最具影响力的攻击.这个领域最常见的漏洞是不对敏感数据进行加密.在数据加密过程中,常见的问题是不安全的密钥生成和管理以及使用弱密码算法,弱协议和弱密码.特别是使用弱的哈希算法来 ...

  6. MerkleTree in BTC

    Merkle 树是一种用于高效且安全地验证大数据结构完整性和一致性的哈希树.它在比特币网络中起到至关重要的作用.Merkle 树是一种二叉树结构,其中每个叶子节点包含数据块的哈希值,每个非叶子节点包含 ...

  7. javascript的内存(垃圾)回收机制?

    垃圾回收机制 1.js中的内存回收 在js中,垃圾回收器每隔一段时间就会找出那些不再使用的数据,并释放其所占用的内存空间. 以全局变量和局部变量来说,函数中的局部变量在函数执行结束后这些变量已经不再被 ...

  8. C++使用gnuplot-cpp库绘制图像

    最近想要对一些时变的变量进行可视化,搜索来搜索去选择了使用gnuplot这个工具. sudo apt-get install gnuplot sudo apt-get install gnuplot- ...

  9. LeViT:Facebook提出推理优化的混合ViT主干网络 | ICCV 2021

    论文提出了用于快速图像分类推理的混合神经网络LeVIT,在不同的硬件平台上进行不同的效率衡量标准的测试.总体而言,LeViT在速度/准确性权衡方面明显优于现有的卷积神经网络和ViT,比如在80%的Im ...

  10. 在宝塔上配置打包好的vue3项目

    配置文件如下 server{ listen 80; server_name gongchang.365cb.cn; index index.html index.htm default.php def ...