mysql数据迁移 mysql跨服务器迁移数据
- 数据库
- 2023-08-13
- 100
今天给各位分享mysql数据迁移的知识,其中也会对mysql跨服务器迁移数据进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!数据迁移用什么工具啊数...
今天给各位分享mysql数据迁移的知识,其中也会对mysql跨服务器迁移数据进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
数据迁移用什么工具啊
数据迁移可以使用多种工具,例如:
1.MySQLWorkbench:适用于MySQL数据库,并具有简单易用的可视化用户界面2.pgAdmin:适用于PostgreSQL数据库,并具有强大的数据迁移功能3.TalendOpenStudio:具有广泛的数据源支持,包括数据库、文件、云等,可实现高效的数据迁移4.ApacheNifi:开源的数据流工具,支持多种数据源和目标,可进行复杂的数据转换和迁移因此,选择合适的工具取决于所使用的数据库类型、数据量和复杂程度等因素。
如何从一台VPS向另外一台VPS转移数据
1分别在两台vps都安装rsync同步软件apt-getinstallrsync
2ssh登录到新VPS服务器,将旧VPS的/var/www/下的数据同步到新服务器rsync-aP--size-only原VPS_IP:/var/www/var/www二转移MYSQL数据库的数据1到原VPS服务器执行mysqldump备份数据(将password替换为你的mysql数据库的密码)mysqldump-uroot-ppassword--all-databases|gzip/root/mysql.sql.gz2登录新的VPS,复制原来的数据到新服务器scp原VPS_IP:/root/mysql.sql.gz/root
3在新服务器上导入mysql数据(将password替换为你的mysql数据库的密码)
如何使用MySQL数据库
主从架构——概念
binlog日志
MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间。
复制原理
1.主库操作保留binlog日志
2.从库的IO线程从主库拉取binlog日志,并生成中继日志(relaylog)
3.从库的SQL线程解析中继日志,并在本身回放
状态检查
主要通过判断IO线程和SQL线程是否处于Running判断复制是否正常,判断Seconds_Behind_Master参数代表数据同步是否延迟:
mysql>showslavestatus\G...Slave_IO_Running:YesSlave_SQL_Running:YesSeconds_Behind_Master:0...
主从架构——衍生各种扩展的主从架构
1.一主多从
2.双主复制
3.级联复制
4.等等
读写分离
大部分场景下,读的频率比写的频率会高很多。所以可以通过扩展多个SLAVE节点提高整体的使用性能。
数据备份
传统的备份包括三种方式:
1.lvmsnapshot(LVM快照备份)
2.mysqldump
3.Xtarbackup
那么要如何实现数据的一致性备份呢(一致性备份是所有数据/文件/磁盘需要在同一个时间点进行备份)
LVMSNAPSHOT
1.执行FTWRL(FLUSHTABLESWITHREADLOCK)
1.1上全局读锁(lock_global_read_lock)
1.2清理表缓存(close_cached_tables)
1.3上全局COMMIT锁(make_global_read_lock_block_commit)
2.执行lvcreate创建lv快照.
3.UNLOCKTABLES解锁
MYSQLDUMP
1.开启可重复读事务隔离
2.开启事务
3.建立数据快照(可以理解为select*from*)
4.结束事务
XTRABACKUP
1.不是整体采用备份锁,只有特定阶段。
2.indodb阶段不需要加锁,ACID的C(持续性)是通过Redolog实现,通过线程增量记录redolog实现。
mysql数据库怎么更改数据存放路径
操作步骤:
1.检查mysql数据库存放目录
mysql-uroot-prootadmin
#进入数据库
showvariableslike'%dir%';
#查看sql存储路径
(查看datadir那一行所指的路径)
quit;
2.停止mysql服务
servicemysqldstop
3.创建新的数据库存放目录
mkdir/data/mysql
4.移动/复制之前存放数据库目录文件,到新的数据库存放目录位置
cp-R/usr/local/mysql/data/*/data/mysql/#或mv/usr/local/mysql/data/*/data/mysql
5.修改mysql数据库目录权限以及配置文件
chownmysql:mysql-R/data/mysql/
vim/etc/my.cnf
datadir=/data/mysql(制定为新的数据存放目录)
vim/etc/init.d/mysqld
datadir=/data/mysql
6.启动数据库服务
servicemysqldstart
说明:根据以上的简单6步操作,已经成功的数据库目录更换路径了。
如何将Oracle迁移至mysql
从Oracle迁移到MySQL需要考虑的事情其实远比我们要理清数据类型转换这些技术细节要多,也更重要。
有两个问题需要前置考虑:
为什么要从Oracle迁移出去?
为什么要迁移到MySQL
如果解答了上述的两个问题,也就基本理顺了整个事情的脉络,我会本着基本客观的态度来说明。
问题1:为什么要从Oracle迁移出去?
这件事情从行业的实践来看(主要是说互联网行业),绝对不是先从技术可行性触发,而是从业务可行性来入手,归根结底,主要的出发点就两个字:成本。
MySQL开源免费,更重要的是行业实践验证充分,所以它具有得天独厚的优势。阿里多年前的去IOE风风火火,俨然成为了行业的标杆。
成本的事情很微妙,三言两语说不清。举例来说,你可以使用Office来办公,当然你可能考虑买授权或者绿色版激活,但是如果使用WPS就是名正言顺的事情,当然功能上是和Office有一些差距,但是不会存在一些模糊的边界。
从业务的另一个维度来看,试想我们所接触的互联网行业,很多业务除了充值和钱相关的业务,其实对于数据完整性一致性的要求就会降低一个维度,很多时候钱能解决的问题都不是问题,比钱更重要的是什么,我觉得应该是安全,安全包括生命安全,行业安全,系统安全,这些绝对不允许出一些重大问题的,这些影响面太大,比如医院医生给患者开药的数据,这些影响面是很大的,一旦出问题很容易成为公众事件。而以金融级业务作为一个分界点,之上的是安全领域,之下的领域其实就是一些可选择的空间了,这些空间很大。选择商业的一个原因也在此,有技术兜底,这些成本对企业来说也是需要和厂商的绑定关系。稀里糊涂硬上,出了问题找不到专业的快速支持,那就悲剧了。
然后是开源定制,其实很多开源技术的开源协议是有差别的,我们采用开源技术也需要考虑这些协议的边界和适用范围。
所以到此需要明确的是:
1.成本因素需要权衡,绝对不是非黑即白的事情
2.迁移到MySQL其实不是终极解决方案,只是一种可选的方案
3.对开源技术积累足够,技术把控能力要强
4.迁移的本质是找到最适合的业务场景,而不是为了技术实现而实现
对于第4点,举个例子,Oracle从性能上是毫无疑问的,但是如果有海量的读请求,其实就不适合Oracle来扛了,当然也不适合用MySQL,可能Redis的方案会更好一些。
问题2:为什么要迁移到MySQL
要回答这个问题,其实我们的主线就是MySQL可以做什么。
第一还是成本,开源免费,方便定制,MySQL的可选方案可绝对不只有社区版,还有一系列的分支,比如Percona分支,MariaDB分支,存储引擎InnoDB,MyRocks等统统都是免费可选。
第二是MySQL效率高,足够轻量级。MySQL的效率从使用上来说,学习周期会很短,容易上手,而且对于系统的资源要求不高。
第三是水平扩展能力,把Oracle比作地铁,MySQL比作公交车会更容易理解,我们可以很轻松的加开公交专线,但是加开地铁线路那就完全不同了。我觉得这是迁移到MySQL的一个核心点,这也就是为什么很多互联网的MySQL规模动辄几百几千了,爆发式增长的业务,MySQL扩展能力了不是体现在MySQL数据库本身,而是对于架构的扩展性上,而这也就是为什么很多MySQLDBA比较贵的一个原因。
第四是复制,这是MySQL相比Oracle的一个亮点,如果需要做跨数据中心的复制,允许存在一定的延迟,使用MySQL原生的复制方案是一件很容易的事情,MySQL支持很多不同维度的复制方案。
第五是业务轻依赖,这个可以分为两个维度来说。一个是功能限制,一个是性能限制。这本身是MySQL功能和性能上的缺失,但是反而是一个优点因为要支撑分布式需求,需要业务对数据库的依赖要更轻巧一些,原本支持不好的存储过程就可以很自然的弱化了。
第六是开源带来的生态体系,开源红利带给企业的是很多的技术方案选择,让原本需要花钱买的事情变成了我们干我们用。
问题3:从Oracle迁移到MySQL需要考虑的事情
首先是架构的差异,在oracle和MySQL里面的差异还是比较大的,当然Oracle里面也是可以使用同义词的架构来实现类似MySQL的访问模型的。
数据类型的差异其实是比较具体的技术细节,我举一些补充的。
oracle里面的Null和空串都可以按照null来处理,但是MySQL里两者是不同的。
oracle表名,用户名都是有长度限制,在30个字符以内,在MySQL里长度要大得多,尤其是表名就需要注意了。
oracle里会默认统一按照大写来处理,MySQL里面默认是大小写敏感的。
对于MySQL类型在MySQL里需要考虑的细节较多,比如数值型,oracle里面number搞定,MySQL有一系列的数值类型可以选择,不建议大一统的bigint适配所有需求。
要更清晰的回答注意事项,可以归类为一个问题:MySQL相比Oracle少了些什么?
性能上肯定有差异,我们主要理一理功能上的。比较的原则不是说oracle有一定要MySQL有,而是从一些使用场景上来说更好的使用特性。
存储过程支持有限,这是很多企业的技术债,处理好了是坦途,处理不好是大坑。比如存储过程,硬要用存储过程调用来对接,后期后患无穷。
没有同义词
没有dblink,这个特性MySQL里不支持其实是件好事,杜绝了那种跨库关联的需求。
没有sequence,这个MySQL的自增列完全可以弥补。
没有物化视图,难以实现增量刷新的需求。
分区表有,但是很少用
优化器薄弱,多表关联,HashJoin在MySQL里还是一个弱项。
索引的差异,覆盖索引的实现两者差异也很大。
绑定变量的性能差异不大,Oracle里面敏感的绑定变量问题在MySQL里不是问题。
性能工具,MySQL里面的性能工具还是比较少的,而且粒度和效果有限。
小结一下:
迁移的本质是找到最适合的业务场景,而不是为了技术实现而实现
mysql表数据量太大,达到了1亿多条数据,除了分库分表之外,还有没有其他的解决方式
通常来说,Mysql表的数据量达到一两千万之后,操作起来开始有些吃力了,如果数据量达到上亿,估计系统是吃不消的。
那么解决方案有哪些呢?我提几个思路:
就用Mysql,不考虑迁移分库分表其实是比较好的方案,但是已经被题主否了,就不详细说了;表设计的优化:在设计表的时候,就要考虑性能问题了。例如字段尽量避免NULL,时间类型尽量使用TIMESTAMP,单表的字段不宜过多等等。
索引的优化:索引不是越多越好,也不是所有的字段都适合建立索引,使用多列索引的时候,要注意SQL中的条件顺序等。
SQL的优化:有的时候查询慢,可能是SQL写的烂。查询尽量用到索引,避免错误的写法导致索引失效,避免使用select*查询出来所有的列,拆分复杂的SQL语句,查询使用分页等等。
分区:分区表是独立的逻辑表,底层由多个物理表组成,这些对用户来说是透明的;如果按照分区字段查询数据的话,就会在某一张分区表内查询,速度回比较快;分区字段的选择,需要根据你们实际业务来;比如你们这张表如果可以分100个分区的话,那么每张表实际只有100万的数据;使用分区表尽量避免全表扫描;建议考虑这种优化方式。
抛弃Mysql,迁移数据库如果公司有钱的话,可以直接上商业数据库,Oracle、DB2什么的,一亿的数据还是可以搞的定的,当然会也比较贵。
其他开源数据库,有可以支持千万级的产品,不过不建议使用,坑会比较多。
云数据库,可以考虑把数据迁移到云上,比如阿里云,花一些钱,少操一些;不过如果是比较敏感的数据,放到云上,多少会不太放心;私有云?这个也贵。
另外,如果不迁移Mysql的话,可以加以非关系型数据库进行辅助,例如一些数据放到Redis里面进行缓存,或者通过跑数的方式,把原始数据加工好放到Mongodb中提供查询,总之就是减少对数据库的访问。
我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。好了,文章到这里就结束啦,如果本次分享的mysql数据迁移和mysql跨服务器迁移数据问题对您有所帮助,还望关注下本站哦!
本文链接:http://www.xinin56.com/su/5118.html