一次生产环境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. python路径相关操作:os.path

    Windows路径格式 import os # 当前python文件位置:T:\ProgrammingPractice\python_path\test.py # 给定的路径 path = r'D:\ ...

  2. mysql语句大全-工作中常用整理(欢迎大家在评论区继续补充)

    1.NOT EXISTS 和 NOT IN SELECT COUNT(ca.aaa) FROM xx ca WHERE NOT EXISTS( SELECT label.* FROM xxx labe ...

  3. Redis 注册成windows 服务并开机自启动

    进入安装目录 输入命令redis-server --service-install redis.windows.conf   输入启动命令即可 redis-server --service-start ...

  4. xlookup与vlookup的区别

    区别还是很大的,vlookup暂时扔不了.

  5. 使用urllib3实现http请求

    Urllib3是一个功能强大,条理清晰,用于HTTP客户端的Python库,许多Python的原生系统已经开始使用urllib3. 1.发送请求 import urllib3 # 创建实例 http ...

  6. Java-C3P0和Druid连接池的运用

    1.概念 其实就是一个容器(集合),存放数据库连接的容器 当系统初始化好后,容器被创建,容器会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器. 好 ...

  7. 国内版Unity 6 Preview编辑器无法切换到DX12的解决方案(6000.0.5f1c1已解决)

    先放解决方案的链接:https://www.cnblogs.com/horeaper/p/18200364 6000.0.0f1c1问题依旧,仍然是没有D3D12文件夹: 不仅新文件不加,旧文件(ha ...

  8. 折腾指南: 将光猫改造成你的NAS,WebDAV+网页文件管理器vList5+natmap

    原文:https://hi.imzlh.top/2024/07/18.cgi (预发布) 很久没有写完全折腾类文章了,这还得追溯到上次折腾S905L3A那会. 这篇文章很长,但是是小白级包学会. 为什 ...

  9. [oeasy]python0079_控制序列_光标位置设置_ESC_逃逸字符_CSI

    光标位置 回忆上次内容 上次我们研究的比较杂 类型转化 进制转化 捕获异常 版本控制 生成帮助文档 变量的常用类型 变量的生命周期控制   数据类型主要研究了两个 字符串 str   整型数字 int ...

  10. [oeasy]python0048_注释_comment_设置默认编码格式

    注释Comment 回忆上次内容 使用了版本控制 git 制作备份 进行回滚   尝试了 嵌套的控制结构 层层 控制   不过 除非 到不得以 尽量不要 太多层次的嵌套   这样 从顶到底 含义 明确 ...