数据库数据迁移方案-1目标

数据库数据迁移方案-1目标,第1张

最近在做对老数据系统的迁移,我们遭遇了比较高难度的挑战,需要无错的完成转换工作,最好能提前在测试环境验证数据,确保完美上线。

手工是不可能完成的,SQL脚本应付不了复杂的环境,程序虽然梦幻但是工作量很大,实际上还有一些一次性工作,例如权限,角色等设置,这个时候程序的价值其实不大。

这里我们准备分3个阶段

1  正确性:每一个字段必须单独检查,后续有多少字段未处理,进度可以反向推进业务

2  性能:转换程序最好可以在8个小时甚至在2个小时内完成

3  高效:数据转换是一件悲伤到逆流成河的事情,错了最好马上秒级还原并马上修正再次验证

4  反复:每一个小的流程可以识别自身状态,整体反复执行

5  唯一:最后生成的数据有唯一的数据主键编号,方便还原问题。

6  快速:充分利用SQL脚本,快速转换数据

想知道你的mysql装在哪里吗?CentOS7一般是装在/var/lib/mysql中的

在完成迁移之前,先用下面的指令来停止mysqld服务

service mysqld stop,或者直接点sudo systemctl stop mysqld

然后用df-h指令看服务器上剩余空间是多少,假设我们新挂了一块500G的硬盘到/data上

那么请把mysql整个文件夹拷贝到/data中,像下面这样:

sudo cp -rf /var/lib/mysql /data/mysql,拷完以后原来的mysql文件夹就可以删除了

然后再修改/etc/my.cnf,这个也是需要su的:

sudo vi /etc/my.cnf

里面有一个字段叫[mysqld],将datadir和socket修改成这样:

datadir=/data/mysql

socket=/data/mysql/mysql.sock

接下来,有的人说要修改/etc/init.d/mysqld,但我的服务器不需要,直接通过

service mysqld start就可以启动SQL服务了,远程也可以连接上,但是:

当你使用终端mysql -u root -p的时候,就会报下面这个错:

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'

这个时候,你有两种解决办法,一种是造一个软连接

ln -s /data/mysql/mysql.sock /var/lib/mysql/mysql.sock,原因是你已经删掉之前的mysql目录了

另外一种办法,是在/etc/my.cnf下面新建一个新字段:

[mysql]

socket=/data/mysql/mysql.sock

第一种方法不需要重启mysql server,第二种方法需要重启mysql server,

然后,你就可以成功地从终端里进入mysql了

敲黑板,不要在[mysql]下面自做主张地写上datadir=/data/mysql,这样会导致本地命令行登录时报错:Unknown Variable: datadir=/data/mysql

Oracle数据库通过快照回退表数据与启动表的行移动功能。

开发过程中难免会执行错脚本,尤其是脑子一卡没写where语句去执行了update *** 作,要是需要执行commit *** 作的话还好,但是有的Oracle连接工具并不需要执行commit *** 作,如DbVisualizer。

oracle表未启用行移动功能,不能回闪问题。被flashback回来rowid发生了变化,这也是为什么flashbacktable需要enablerowmovement的原因,正常情况表中数据的rowid是绝对不可以改变的。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9991373.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存