mysql数据库迁移

时间:2023-10-05 03:13:00 编辑:大鹏 来源:长期打折网

oracle数据库如何迁移,数据从MySQL迁移到Oracle需要注意什么,如何将MySQL的数据迁移到MariaDB里面去,为什么要 MySQL 迁移到 Maria DB,Linux Mysql如何移动MySQL数据库目录位置?...

oracle数据库如何迁移
oracle数据库如何迁移
提示:

oracle数据库如何迁移

这个问题有点笼统了,是Oracle迁移到Mysql?还是Oracle迁移到DB2?如果只讨论迁移方式的话,大致有以下几种
1、数据泵(Data Pump):数据泵是 Oracle 官方提供的一个数据迁移工具,它可以将数据库对象以二进制格式导出并导入到另一个数据库中。使用数据泵可以快速高效地将大量数据迁移至另一个数据库。
2、Oracle GoldenGate:Oracle GoldenGate 是一种实时数据复制和数据集成解决方案,它可以在源和目标数据库之间实现实时的、高效的数据同步,支持跨平台和异构数据库之间的数据迁移。
3、Oracle 迁移工具(Migration Workbench):Oracle 迁移工具是 Oracle 公司提供的一套数据库迁移工具,可以将非 Oracle 数据库的数据迁移到 Oracle 数据库。它支持多种非 Oracle 数据库系统,包括 MySQL、SQL Server、DB2、Sybase 等。
4、外部表(External Table):外部表是 Oracle 数据库中的一种特殊表,它可以通过访问外部文件来存取数据,也可以通过外部表将数据从一个数据库移动到另一个数据库。
5、数据库链接(Database Link):数据库链接可以在不同的 Oracle 数据库之间建立网络连接,可以通过 SQL 语句在不同的数据库之间进行数据传输和同步。
6、第三方工具:还有一些第三方数据迁移工具,如 dbForge Studio、Toad for Oracle、SQL Developer 等,可以帮助用户更方便地进行数据迁移。
以上几种方式,在不同量级数据,不同目标数据库类型上,都有效率的差异,需要结合实际情况进行选择。

数据从MySQL迁移到Oracle需要注意什么
提示:

数据从MySQL迁移到Oracle需要注意什么

将数据从MySQL迁移到Oracle的注意事项,有如下几点1.自动增长的数据类型处理MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值。ORACLE没有自动增长的数据类型,需要建立一个自动增长的序列号,插入记录时要把序列号的下一个值赋于此字段。CREATE SEQUENCE 序列号的名称 (最好是表名+序列号标记)INCREMENT BY 1 START WITH 1 MAXVALUE 99999 CYCLE NOCACHE;INSERT 语句插入这个字段值为: 序列号的名称.NEXTVAL2. 单引号的处理MYSQL里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。在插入和修改字符串前必须做单引号的替换:把所有出现的一个单引号替换成两个单引号。当然你如果使用 Convert Mysql to Oracle工具就不用考虑这个问题3.长字符串的处理在ORACLE中,INSERT和UPDATE时最大可操作的字符串长度小于等于4000个单字节, 如果要插入更长的字符串, 请考虑字段用CLOB类型,方法借用ORACLE里自带的DBMS_LOB程序包。插入修改记录前一定要做进行非空和长度判断,不能为空的字段值和超出长度字段值都应该提出警告,返回上次操作。4. 翻页的SQL语句的处理MYSQL处理翻页的SQL语句比较简单,用LIMIT 开始位置, 记录个数。ORACLE处理翻页的SQL语句就比较繁琐了。每个结果集只有一个ROWNUM字段标明它的位置, 并且只能用ROWNUM80。以下是经过分析后较好的两种ORACLE翻页SQL语句(ID是唯一关键字的字段名):语句一:SELECT ID, FIELD_NAME,.. .FROM TABLE_NAMEWHERE ID IN (SELECT IDFROM (SELECT ROWNUM AS NUMROW, IDFROM TABLE_NAMEWHERE 条件1ORDER BY 条件2)WHERE NUMROW > 80AND NUMROW 80 AND NUMROW SUBDATE(NOW(),INTERVAL 7 DAY)ORACLE找到离当前时间7天用:DATE_FIELD_NAME >SYSDATE - 7;6. 字符串的模糊比较MYSQL里用 字段名 like '%字符串%',ORACLE里也可以用 字段名 like '%字符串%' 但这种方法不能使用索引, 速度不快,用字符串比较函数 instr(字段名,'字符串')>0 会得到更精确的查找结果。7. 空字符的处理MYSQL的非空字段也有空的内容,ORACLE里定义了非空字段就不容许有空的内容。按MYSQL的NOT NULL来定义ORACLE表结构, 导数据的时候会产生错误。因此导数据时要对空字符进行判断,如果为NULL或空字符,需要把它改成一个空格的字符串。Oracle移植到mysql注意事项客户用的数据库是mysql,而研发好的产品支持oracle,我们必须把数据库环境从oracle移植到mysql。在移植的过程中碰到了下面一些问题,如果我们在最初的设计、编码过程中注意数据库的移植性,这种情况下可以完全不需要作额外工作。一、数据库环境从oracle移植到mysql碰到的问题。1、 大小写敏感的区别(如果服务器OS是linux)。在oracle中一般情况下不区分大小写。有时候我们在使用oracle不注意大小写的问题,表名和字段名不加双引号是不区分大小写的,像这样:insert into tableName 和 insert into TABLENAME效果是一样的,用工具导出创建/数据初始化脚本,得到的结果一般表名和字段名转化成了大写。但在MySQL中,所使用操作系统的大小写敏感性决定了数据库名和表名的大小写敏感性。数据库对应数据目录中的目录,数据库中的每个表至少对应数据库目录中的一个文件(也可能是多个,取决于存储引擎)。因此,使用数据库或表实际上是操纵这些文件(夹),所以使用操作系统的大小写敏感性决定了数据库名和表名的大小写敏感性。在以linux为内核的操作系统中是大小写敏感的。解决办法,是把mysql的数据库名和oracle的大小写保持一致,表名与应用程序中sql字符串中的表名保持一致,如果应用程序中字段名用了双引号,那请把sql中的字段名大小写与双引号里的字符保持一致。如果你的应用程序所引用的表名、字段没有统一大小写,那麻烦就大了。2、保留字的区别。像sql语言的函数名(如:inteval,show)等是保留字。Oracle中保留字是可以作为表名和字段名,并且不影响使用,但mysql中保留字是不能作为表名和字段名,如果使用会报语法错误。解决办法,把sql语句中的保留字用‘`'符号引起来,这个符号位于键盘的tab键上面;如果是字段名还有另外一种方法tablename.字段名。像这样:insert into tablename (id, `interval`) value(?..或insert into tablename (id, tablename.inteval) value(?..3、自动增长类型的区别。Oracle有sequence,mysql中没有,但有auto_increment属性。解决办法是把Oracle中sequence转换成使用auto_increment属性,某些情况可能还有一种办法可以解决问题,新建一个独立的表用来专门记录自动增长型的数据。4、数据类型的区别。在mysql中没有像oracle中的varchar2、number,mysql有与之对应的varchar、numeric,当然在oracle中没有mysql的time类型。解决办法是替换。5、索引长度限制的区别。从MySQL 4.1.2开始,MyISAM和InnoDB表索引长度支持1000字节,也就是说索引字段的长度不能超过1000字节,如果超过会报这样的错:ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes。如果是UTF-8编码,相当于333个字符的长度(因为UTF8一个字符占3个字节)。Oracle的索引长度限制比mysql要宽松得多。解决办法:就不必要多说了,要么改索引的定义,要么改字段的定义长度。二、为了数据库的兼容性我们应该注意些什么。数据库的兼容性应该是数据库设计应该重视的一个问题,因为有时候客户存在已经在用的数据库,并且不希望同时维护两个数据库,这样的话兼容多种数据库还能成为产品的一个卖点。作到数据库的兼容性关键是遵守标准用法。1、遵守标准用法,尽量不使用某种数据库特有的用法。如msyql的‘`'符号的用法,再比如,很多人有这种用法,在使用oracle开发的时候创建sequence,往表中插数据之前先SELECT seq.nextval FROM DUAL;,然后把查询得到的值作为value插入表中,这种用法没法适应没有sequence的数据库,每个数据库都有自动增长型的用法,如果需要使用就应该完全地使用。再举个例子,不同的数据库对分页查询作了扩展,postgresql有offset,limit,oracle就没有。2、保留字。要求数据库设计者尽量不使用保留字作表名和字段名。也有很多人有这种用法,在表名和字段名前加‘_',像这样:create table _tablename ( _id integer)。这样永远不会出现保留字引起的问题。3、避免数据库大小写敏感的问题。选择数据库表名和字段名采用大写还是小写,并且在数据库的设计和编码过程中完全统一。当使用 Convert Oracle to Mysql 工具时,请注意“名称转换为大写”这个选项的控制。

如何将MySQL的数据迁移到MariaDB里面去
提示:

如何将MySQL的数据迁移到MariaDB里面去

  本来 MariaDB 的描绘初衷之一即是彻底兼容 MySQL,包含 API 和客户端协议,使之能轻松变成 MySQL 的代替品,所以由 MySQL 搬迁到
  MariaDB 基本上能够称之为“晋级”,就如同软件晋级版别一样。MariaDB 的技能文档上是这样写的:
  若是是一样的根底版别(如
  5.5),能够直接卸载 MySQL 然后装置
  MariaDB,这样就能够用了。乃至不需求备份然后复原数据库。当然,稳妥起见,晋级前将一切的数据库都备份一下仍是十分有必要的,以防万一。
  若是
  MariaDB 的主版别高,在通过上面的卸载 MySQL 再装置 MariaDB 操作之后,需求运用 mysql_upgrade
  晋级一下。是的,乃至连命令行都与运用 MySQL 的时分一样。
  一切原先的客户端和连接器(PHP、Perl、Python、Java
  等)都不需求做任何改动就能正常作业,由于 MariaDB 与 MySQL 运用的是一样的客户端协议,而且客户端库文件也是二进制兼容的。
  上面用 *
  来匹配删去一切 mysql 数据包(包含因包依靠而删去的别的包,如 postfix)。由于直接装置的时分会呈现抵触,例如:
  file
  /usr/share/mysql/ukrainian/errmsg.sys from install of
  MariaDB-server-5.5.31-1.i686 conflicts with file from package
  mysql-libs-5.5.32-1.el6.remi.i686
  嗯,如同由于将 php-mysql 也给删去了(实际上这个不应删去的),所以
  phpMyAdmin 也由于依靠联系而被删去了,我没仔细看。
  所以最佳不要用通配符 *,而是选择性删去几个首要的,
  # yum remove
  mysql mysql-server mysql-libs
  可是这个我没有再测验,由于后边有非常好的办法。
  C. 然后装置 MARIADB 及相应
  PHP 拓展。
  也是指定几个首要的装置包,剩余的让 yum 自个进行依靠联系查看。
  # yum install
  MariaDB-server MariaDB-client php-mysql
  或许不装置 MariaDB-server
  而改为具有同步多主群集特性(synchronous multi-master cluster)的 MariaDB Galera Cluster:
  
  # yum install MariaDB-Galera-server MariaDB-client galera
  这里对比搞笑的是,没注意前面把
  php-mysql 给卸载了,成果运转数据库之后拜访 WordPress,成果遭受下面的过错:
  Your PHP installation appears
  to be missing the MySQL extension which is required by WordPress.
  D.
  完结,修补
  不论版别是不是晋级了,履行一下数据库晋级指令总没有害处:
  # mysql_upgrade -p

  看看数据库版别是不是晋级了:
  # mysql -u root -p -e 'show global variables like
  "version";'
  Enter password:
  +---------------+----------------+

  | Variable_name | Value |
  +---------------+----------------+

  | version | 5.5.31-MariaDB |
  +---------------+----------------+

  将 MariaDB 参加随体系自发动列表,
  # chkconfig --levels 345 mysql on
  嗯,曾经
  MySQL 的时分是 mysqld,现在是 mysql,就差了一个字母 d。
  发动它,
  # service mysql start

  这个时分服务器上的网站大概现已能够正常作业了,拜访数据库没有疑问。
  若是有必要,装置完 MariaDB 之后能够重新装置 postfix。若是发现
  phpMyAdmin 提示无拜访权限了,那即是被卸载了,需求重新装置和装备 phpMyAdmin。
  别的,由于之前进行了卸载操作,所以本来的 MySQL
  和 phpMyAdmin 的装备文件都被清除了,也需求重新装备。特别是 MySQL 的装备文件 /etc/my.cnf,由于 MariaDB
  尽管创建了一个my.cnf.d 文件夹来存储自个的装备文件,可是它会首要加载 my.cnf,且本来 MySQL 的装备的 [mysqld]
  那一节的内容仍是有用的。
  3. 较好的晋级办法
  仍是在上面介绍的体系装备下,先增加 MariaDB 装置源,然后直接履行体系晋级,
  # yum
  update --skip-broken
  MariaDB 有关装置包会被装置,不需求的 MySQL
  包将被卸载,而且晋级之后不需求对体系进行修补了。看看输出的前面一部分:
  
  ==============================================================================================================

  Package Arch Version Repository Size
  
  ==============================================================================================================

  Installing:
  MariaDB-Galera-server i686 5.5.29-1 mariadb 19 M

  replacing mysql.i686 5.5.21-1.el6.remi
  replacing
  mysql-server.i686 5.5.21-1.el6.remi
  MariaDB-server i686 5.5.31-1 mariadb
  32 M
  replacing mysql-server.i686 5.5.21-1.el6.remi
  
  MariaDB-shared i686 5.5.31-1 mariadb 1.0 M
  replacing
  mysql-libs.i686 5.5.21-1.el6.remi
  kernel i686 2.6.32-358.11.1.el6
  updates 24 M
  libjpeg-turbo i686 1.2.1-1.el6 base 176 k
  replacing
  libjpeg.i686 6b-46.el6
  Updating:
  .........
  到这里才感觉到 MariaDB
  的描绘思维那个无缝代替 MySQL 不是噱头,而是实实在在的技能。所以我也就不急着给 VPS 晋级到 MariaDB 了,横竖过不了多久 CentOS
  就会选用 MariaDB,到时分再自然而然地搬迁吧。转载

为什么要 MySQL 迁移到 Maria DB
提示:

为什么要 MySQL 迁移到 Maria DB

要 MySQL 迁移到 Maria DB
 在Oracle收购了SUN公司之后, MySQL很不幸的落在了Oracle的手中,MySQL与Oracle DB存在竞争关系,很可能导致Oracle公司影响MySQL的开发与开放。MySQL之父Widenius在意识到Oracle会对MySQL做动作之前对MySQL另开了一个Branch:MariaDB。作为一个能够完全兼容MySQL的开源开放产品(向下兼容),受到了很多公司的青睐,Red Hat Fedora ,openSUSE ,维基百科,谷歌,淘宝等公司都先后把MySQLDB迁移到Maria DB,从而更好的应对未来。
当然,未来还未来,如果MariaDB的价值仅仅在未来,或许没有那么多公司愿意承担风险,进行数据库的迁移,特别是谷歌这样实力雄厚的科技公司,更不会担心技术不可控性。
  可见,哪怕是现在,Maria比之MySQL也有很多的优势:
性能提升
 
  2. 安全透明。(完全开源,开放,MariaDB的商标属于Maria基金会,以保障MariaDB不会再次发生MySQL这种事儿
  3. 支持更多存储引擎。(NoSql backend :Cassandra )
  4. MariaDB Galera Cluster

同步复制真正的multi-master,即所有节点可以同时读写数据库。
自动的节点成员控制,失效节点自动被清除。
新节点加入数据自动复制;真正的并行复制,行级。
用户可以直接连接集群,使用感受上与MySQL完全一致。
    优势:

因为是多主,所以不存在Slavelag(延迟);
不存在丢失事务的情况;同时具有读和写的扩展能力;
更小的客户端延迟;
节点间数据是同步的,而Master/Slave模式是异步的,不同slave上的binlog可能是不同的。
  5. 与MySQL完全兼容(至少是现在)。

  风险评估。这是最现实的问题,如果数据迁移风险过大,或者迁移之后发现Maria DB上各种不适,将会对产品造成极大的伤害。值得庆幸的是,从Maria DB的官方Blog上,我们看到MySQL可以无缝迁移到Maria的文章,还有MySQL 与Maria混用的相关实例。集群方面,Maria采用的 Galera Cluster同样适用于MySQL,应该不会有接入的风险。
  当然,还有一个因素,就是尽早迁移会尽量降低复杂度,Maria DB与MySQL未来肯定分道扬镳,兼容性会越来越差。

Linux Mysql如何移动MySQL数据库目录位置?
提示:

Linux Mysql如何移动MySQL数据库目录位置?

假如要把目录移到/home/data下需要进行下面几步: 1、home目录下建立data目录 cd /home mkdir data 2、把MySQL服务进程停掉: mysqladmin -u root -p shutdown 3、把/var/lib/mysql整个目录移到/home/data mv /var/lib/mysql /home/data/ 这样就把MySQL的数据文件移动到了/home/data/mysql下 4、找到my.cnf配置文件 如果/etc/目录下没有my.cnf配置文件,请到/usr/share/mysql/下找到*.cnf文件,拷贝其中一个到/etc/并改名为my.cnf)中。命令如下: [root@test1 mysql]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf 5、编辑MySQL的配置文件/etc/my.cnf 为保证MySQL能够正常工作,需要指明mysql.sock文件的产生位置。修改socket=/var/lib/mysql/mysql.sock一行中等号右边的值为:/home/mysql/mysql.sock 。操作如下: vi  my.cnf    (用vi工具编辑my.cnf文件,找到下列数据修改之) # The MySQL server [mysqld] port   = 3306 #socket  = /var/lib/mysql/mysql.sock(原内容,为了更稳妥用“#”注释此行) socket  = /home/data/mysql/mysql.sock   (加上此行) 6、修改MySQL启动脚本/etc/init.d/mysql 最后,需要修改MySQL启动脚本/etc/init.d/mysql,把其中datadir=/var/lib/mysql一行中,等号右边的路径改成你现在的实际存放路径:home/data/mysql。 [root@test1 etc]# vi /etc/init.d/mysql #datadir=/var/lib/mysql    (注释此行) datadir=/home/data/mysql   (加上此行) 7、重新启动MySQL服务 /etc/init.d/mysql start 或用reboot命令重启Linux 如果工作正常移动就成功了,否则对照前面的7步再检查一下。还要注意目录的属主和权限。

上一篇:sandwich
下一篇:没有了
相关文章
最新资讯
热门资讯