日志, MYSQL, 数据库, ORACLE






使用道具


回复



 

 

一、环境和需求
1、环境


Mysql数据库服务器:

OS version:linux 5.3 for 64 bit

Mysql Server version: 5.0.45

Oracle数据库服务器:


OS version:linux 5.3 for 64 bit


Oracle version:oracle 11g r2

2、需求

       把mysql数据库的数据转移到oracle数据库。目前mysql数据库的备份文件为.sql文件,每个表一个.sql文件,把这些文件的数据导入到oracle数据库。

二、mysql数据恢复

       采用先把mysql数据库备份文件恢复到一个mysql测试库中,然后使用oracle sql developer把mysql测试库中的数据转移到oracle数据库。


       mysql备份恢复到myql测试库:


       因为本次试验采用的mysql备份为.sql文件,所以采用批量source处理。批量执行.sql文件,实现在mysql测试库重新建立表并恢复数据。


       如果备份文件采用的是其他方式,则需要用对应的恢复办法进行恢复。


       恢复操作:


[root@localhost ~]# mysql -u root -p

Enter password: ---输入root用户的密码。

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 90

Server version: 5.0.45 Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> use test;

Database changed

mysql> source actors.sql;

mysql> source act_tactics.sql;

mysql> ………………


一次把所有的.sql文件贴在mysql的命令窗口,批量执行即可。


       注:因为mysql库是生产库,不能直接做实验,所以才把备份恢复到一个测试库中,进行测试,实际中如果可以直接连mysql数据库,则这一步可以省略。

三、通过oracel sql developer转换数据库

       Mysql转到oracle数据库,要根据不同情况选择不同的方法:


1、  从现有的mysql库直接转到oracle数据库


这是不用恢复mysql数据库,直接可以用sql developer转到oracle里,这时要现在oracle数据库中建好用户(用户名为mysql数据库名),选好默认表空间,mysql数据就会导入到该用户下。


2、  从mysql数据库导出的sql文件导入到oracle数据库


如果是只有mysql的导出文件,则需要先把该文件恢复到一个mysql数据库中,然后再把恢复后的mysql数据库转换到oracle数据库中。


这种情况要注意oracle数据库的用户名。因为sql developer把mysql转换到oracle数据库中时,会把mysql的数据存放到一个用户下,这个用户名一定会和mysql的数据库名相同。如果oracle中已有这个用户,则数据直接导入到该用户下;如果没有这个用户,则sql developer会直接创建这样的用户,并把数据导入到该用户下。需要注意的是,sql developer默认创建的oracle数据库用户的默认表空间是user,如果不注意,很有可能会导致user表空间爆满!!!所以这种情况最好先建一个和mysql数据库名一样的oracle用户,以防止user表空间爆满影响数据导入。

1、安装oracel sql developer

       首先从oracle官方网站下载oracle sql developer,下载的sql developer是没有集成jdk的,如果本机也没有安装过jdk,则需要先安装对应版本的jdk,这个可以查找sql developer的readme.html文件,里面会说明需要的jdk。


MySQL 表转对象 mysql表结构转oracle_数据库


    安装的第一步会让你选择JDK,否则无法安装。安装非常简单,这里就不做说明。


Windowd 64位sqldeveloper下载:


http://download.oracle.com/otn/java/sqldeveloper/sqldeveloper64-3.0.04.34-no-jre.zip


Windowd 32位sqldeveloper下载:


http://download.oracle.com/auth/otn/java/sqldeveloper/sqldeveloper-3.0.04.34.zip?e=1313718071&h=0b242a06885410fbb4df8b5628a804e8


安装JDK和mysql-connector-java


jdk-6u27-windows-x64.exe下载地址(最第要用jdk-6u11以后的版本):


http://download.oracle.com/auth/otn-pub/java/jdk/6u27-b07/jdk-6u27-windows-x64.exe?e=1313726411&h=ff3cc2d66e07d7d63d6f8e9fbabc3743


mysql-connector-java各版本下载:


http://download.softagency.net/mysql/Downloads/Connector-J/


mysql-connector-java配置:


MySQL 表转对象 mysql表结构转oracle_MySQL 表转对象_02


MySQL 表转对象 mysql表结构转oracle_MySQL 表转对象_03


    以上的mysql-connector-java-5.0.8-bin.jar就是mysql-connector-java-5.0.8.zip解压出来的文件。配置好jdbc后,即可开始数据库连接。


    如果要连接sql server,则下载jtds-1.2.5-dist.zip配置即可。

2、连接数据库

       连接oracle的用户要有create table权限,一般用system用户就可以。连mysql数据库因为是读取数据,用什么用户都可以(一般默认是root用户)。


       转换后oracle数据库会多一个新的用户名,就是mysql的数据库名。除了这个用户,系统还会自动建一个名为EMULATION的用户,该用户可以锁定或删除都可以。


打开sqldeveloper.exe:


MySQL 表转对象 mysql表结构转oracle_数据库_04


新建oracle数据库连接:


Sql developer转换数据时会产生一些字典表,这些字典表会保存到sql developer链接oracle数据库的用户中,如果这个用户的名字和Mysql数据库名字不同,则mysql数据不会保存在该用户下。


MySQL 表转对象 mysql表结构转oracle_mysql数据库_05


点击测试,测试连接:


MySQL 表转对象 mysql表结构转oracle_MySQL 表转对象_06


点击保存:


MySQL 表转对象 mysql表结构转oracle_数据库_07


点击连接,即可连接到oracle数据库:


MySQL 表转对象 mysql表结构转oracle_mysql数据库_08


新建mysql数据库连接:


1.)选择mysql选项卡


MySQL 表转对象 mysql表结构转oracle_sql_09


2.)填写mysql数据库信息


MySQL 表转对象 mysql表结构转oracle_数据库_10


填写完进行测试,成功后点击保存,并连接到mysql数据库。


MySQL 表转对象 mysql表结构转oracle_sql_11

3、复制表

       如果不用迁移整个数据,只是迁移表的数据,则可以直接在mysql数据库库中选中要转移的表,点“右键”选“复制到oracle”即可。此时会把表转移到sql developer链接oracle数据库的用户下,并且该用户下不能有同名的表。


       不过从以往的经验看,复制表要比迁移数据库效率低,所以如果是复制所有的表,最好用移植数据库功能。

4、移植数据库

点击“工具”,选择“移植”


MySQL 表转对象 mysql表结构转oracle_MySQL 表转对象_12


移植简介


MySQL 表转对象 mysql表结构转oracle_MySQL 表转对象_13


MySQL 表转对象 mysql表结构转oracle_mysql_14


MySQL 表转对象 mysql表结构转oracle_MySQL 表转对象_15


MySQL 表转对象 mysql表结构转oracle_数据库_16


选择要转换的mysql数据库,添加到列表中:


MySQL 表转对象 mysql表结构转oracle_sql_17


MySQL 表转对象 mysql表结构转oracle_mysql_18


指定转换规则,可以根据自己的情况设定字段属性的转换,也可以新添加规则。不过一般选择默认的就能满足需求。


MySQL 表转对象 mysql表结构转oracle_mysql_19


选择目标数据库


MySQL 表转对象 mysql表结构转oracle_mysql_20


MySQL 表转对象 mysql表结构转oracle_mysql数据库_21


查看转换概要,点击“完成”开始转换


MySQL 表转对象 mysql表结构转oracle_mysql数据库_22


MySQL 表转对象 mysql表结构转oracle_sql_23


MySQL 表转对象 mysql表结构转oracle_数据库_24


       转换完成后需要检查数据库的各种对象是否完成,状态是否正确,尤其是表的数量一定要核对,因为有时候有些表会不能成功转换,需要手工操作。

四、修改oracle用户名

       因为转换过来的数据默认存放在USERS表空间里,而且会创建一个和mysql数据库名一模一样的oracle用户,并把mysql数据库导入到该用户下。可以exp出来新用户的数据后,然后再导入到正确的用户下,这样数据也会存在正确的表空间下面。但是如果数据量很大的时候,exp/imp会很浪费时间,建议数据量大的时候不要采用这种方式。


       如果要是先建好用户(用户名用mysql数据库的数据库名),定义好用户的默认表空间,然后再做mysql到oracle转换,这样就可以即把表存放到正确的位置,又可以用正确的用户名。也可以改变数据库的默认表空间防止自动创建用户的默认表空间使用user表空间:


SQL> ALTER DATABASE DEFAULT TABLESPACE mis_data;


       注意:改过名字的用户,权限会继承,但是默认表空间不会继承,需要手工再设定默认表空间:


SQL> ALTER USER OA identified by oa default tablespace MIS_DATA temporary tablespace TEMP;


修改底层表 USER$更换用户名


注:修改oracle用户名需要sys用户,或者给操作用户操作user$表的权限。


SQL> grant select on user$ TO system;


SQL> grant update on user$ to system;


1、 查看用户的user#


SQL> show user

USER is "SYSTEM"

SQL> select user#,NAME from SYS.user$ WHERE NAME='TEST';

      USER# NAME

---------- ------------------------------

        93 TEST


2、修改用户名


SQL> UPDATE USER$ SET NAME='新用户名' WHERE USER#=93;


   已更新 1 行。


注:单引号中的新用户名一定要用大写,如果是小写,下面会提示找不到该用户。


3、提交完成


SQL> COMMIT;


4、修改系统检查点


SQL> ALTER SYSTEM CHECKPOINT;


5、修改新用户密码


SQL> ALTER USER 新用户名 IDENTIFIED BY 新密码;


6、如果提示新用户不存在,则刷新shared_pool


SQL> ALTER USER 新用户名 IDENTIFIED BY 新密码         


  *ERROR 位于第 1 行:ORA-01918: 用户'新用户'不存在


SQL> ALTER SYSTEM FLUSH SHARED_POOL;


7、刷新shared_pool后重新修改用户密码


SQL> ALTER USER 新用户 IDENTIFIED BY 新密码;


8、测试连接


SQL> CONN 新用户/新密码@orcl;


9、查看新用户是否拥有原用户的对象


SQL> SELECT * FROM TAB;

五、mysql远程连接1、改表法

       可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称"%"。代码如下:


mysql -u root –p vmware

mysql> use mysql;

  mysql> update user set host = '%' where user = 'root';

  mysql> select host, user from user;

2、授权法

例如,你想myuser使用mypassword从任何主机连接到mysql服务器的话。


       GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%'IDENTIFIED BY 'mypassword' WITH GRANT OPTION;


  如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器,并使用mypassword作为密码。


  GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3'IDENTIFIED BY


  'mypassword' WITH GRANT OPTION;


  我用的第一个方法,刚开始发现不行,在网上查了一下,少执行一个语句 mysql>FLUSH RIVILEGES使修改生效,就可以了。

3、另外一种方法

  在安装mysql的机器上运行:


1)进入MySQL服务器


d:\mysql\bin\>mysql -h localhost -u root


2)赋予任何主机访问数据的权限


mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION


3)修改生效


mysql>FLUSH PRIVILEGES


4)退出MySQL服务器


mysql>EXIT


  这样就可以在其它任何的主机上以root身份登录啦。


如果经过上面的操作,还不能解决问题,那可能就是服务器的安全设置问题,是不是ip安全策略或防火墙没有开启3306的例外。

4、安全模式修改用户密码

在用root登录mysql数据库的时候报错:


[root@mail mysql]# mysql -u root -p


Enter password:


ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)


       这个错误一般都是root登录mysql的密码错误造成的(root登录mysql的密码和登录系统时的密码不是同一个密码,有时候可以不一样),使用下面的方法可以重新设定root登录mysql数据库的密码,该方法非常使用,有时候为了系统安全,一定要把root登录mysql和登录系统时的密码改成不一致:


[root@localhost mysql]# service mysqld stop


[root@localhost mysql]# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &


       然后可以不用密码直接进入系统:


[root@localhost mysql]# mysql -u root mysql


       进入系统后可以直接修改root用户的密码:


mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root';

mysql> FLUSH PRIVILEGES;

mysql> quit

[root@localhost mysql]# service mysqld start

[root@localhost mysql]# mysql -uroot -p

Enter password: <输入新设的密码newpassword>

mysql>


       启动mysql安全模式的命令参数:


grant-tables,授权表。在启动mysql时不启动这个表,像忘了密码啥的,用这个模式启动很方便的。


不监听3306,说白了就是不启动mysql的网络服务。


这俺就不形容了。

六、linux下mysql卸载和安装1、MySQL RPM版本的安装及卸载

1、前期准备


       由于redhat Enterprise 5 中自带一个mysql的版本,如果在安装linux前未选择mysql的安装此步就可跳过,因为我当时安装了现在将其卸载,步骤如下:


a. 查找已安装的myslq 版本


# rpm -qa|grep mysql


       注意大小写,如果mysql 不行就换MySQL。在屏幕上将显示已安装的mysql包名如:mysql-5.0.22-2.1.0.1 ;


b. 将搜索出的包名卸载


# rpm –e --nodeps mysql-5.0.22-2.1.0.1


       nodeps表示强制删除


c. 再次查找该包名


       如果没有结果输出则表明已将该版本的mysql卸载了 。


2. 准备安装资源


a. perl-DBI-1.5.2-1.fc6.i386.rpm


       该包为是安装mysql的依赖,没它mysql安装不起,查看是否安装,如果安装了就不需要了,可以通过 # rpm -qa | grep perl* 查看是否已经安装,该包在linux系统盘上可以找到,以下提供该包下载。


b. MySQL-server-community-5.0.67-0.rhel5.rpm


  MySQL-client-community-5.0.67-0.rhel5.rpm


       可从http://dev.mysql.com/downloads/mysql/5.0.html 下载相应linux相应的版本。


c. 安装文件上传到服务器


       准备好相应的安装包后将其利用FTP上传到 linux系统路径下。


3. 开始安装


a. 先安装 perl-DBI-1.5.2-1.fc6.i386.rpm


#rpm -ivh perl-DBI-1.5.2-1.fc6.i386.rpm


       查看是否安装成功rpm -qa|grep perl-DBI*


b. 安装好perl,接着先安装 mysql server版


#rpm -ivh MySQL-server-community-5.0.67-0.rhel5.rpm


       查看是否安装成功rpm -qa|grep MySQL ,查看该进程是否启动ps -ef|grep MySQL ,由于安装好server版后就已经启动了。


c. 安装好server版,开始接着安装 client版:


# rpm -ivh MySQL-client-community-5.0.67-0.rhel5.rpm


       查看是否安装成功 #rpm -qa | MySQL。


d. 好了到此就已经安装完毕,测试是否可以运行:


# mysql


       出现 mysql> 命令符说明安装成功,默认用户为root没有密码所以可以直接进入。

2、           MySQL二进制版本的安装及卸载

       二进制版本的mysql是已经编译好的,无需configure,make make install 等步骤,只需配置一下即可使用,卸载也方便,直接删除即可;现在以mysql-standard-4.1.13-pc-linux-gnu-i686.tar.gz 版本做介绍 :


1.    改变该文件为可执行权限


# chmod 755  mysql-standard-4.1.13-pc-linux-gnu-i686.tar.gz


2. 将解压后生成的目录,复制到/usr/local/下并改名为mysql


# tar -xvzf  mysql-standard-4.1.13-pc-linux-gnu-i686.tar.gz


2.    建立mysql组


# groupadd mysql


3.    建立mysql用户并且加入到mysql组中


# useradd mysql -g mysql


4.    创建mysql配置文件


# cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf


    在 support-files目录下有4个模版文件,我们选择其中一个座位Mysql的配置文件,覆盖/etc/my.cnf(系统默认的配置,其中设置了性能参数和Mysql的一些路径参数)。


5. 进入mysql目录


# cd /usr/local/mysql


初试化表并且规定用mysql用户来访问


# ./scripts/mysql_install_db --user=mysql


       初始化表以后就开始给mysql和root用户设定访问权限。


6. 设定mysql用户访问权限


# chown -R mysql data


       设定mysql用户能访问/usr/local/mysql/data ,里面存的是mysql的数据库文件.这个目录是在/etc/my.cnf中有配置,mysql_install_db时产生。


# chown -R mysql data/.


设定mysql用户能访问/usr/local/mysql/data/mysql下的所有文件。


# chgrp -R mysql .


设定mysql组能够访问/usr/local/mysql。


# /usr/local/mysql/bin/mysqld_safe --user=mysql &


7. 进入 bin目录


cd /usr/local/mysql/bin


8. 运行mysq命令


#mysql


       如果没有没有启动 或出现 Can't connect to local MySQL server through socket '/tmp/mysql.sock'。


解决方法:


#cd /usr/local/mysql/support-files


启动即可既可在生成/tmp/mysql.sock


#./mysql.server start


       如果 /tmp/mysql.sock 无该文件存在,且mysql是处于开启的状态。


解决方法:


#netstat -an | grep 3306   //查看 3306端口


#ps -ef | grep mysql  // 查找 mysql 进程


# kill -9  进程号    //强制删除mysql的进程号


#./mysql.server start   //启动即可 既可在生成 /tmp/mysql.sock


       如果在任意路径下如数mysql命令得到的无该命令咋办呢?


解决方法:


修改 /etc/profile 文件,在文件中加入


PATH=$PATH:/usr/local/mysql/bin/


export PATH


       保存即可退出执行 source /etc/profile。以上操作完既可以在任意目录执行# mysql 命令。


如果想执行 service mysql start or restart stop 命令咋办的? 在不能老#./mysql.server start


解决方法:


将 mysql.server复制一份到/etc/rc.d/init.d下并改名 mysql 或 建个连接文件,假设当前目录为/etc/rc.d/init.d


如:#cp /usr/local/mysql/support-files/mysql.server mysql(复制)


或:#ln -s /usr/local/mysql/support-files/mysql.server mysql (建立连接文件)


完成以上操作即可  执行 service mysql start (or restart stop)


用如下命令修改MYSQL密码


# /usr/local/mysql/bin/mysqladmin -u root password yourpassword


默认安装密码为空,为了安全你必须马上修改。


# chmod 700 /etc/init.d/mysql


# chkconfig --add mysqld


# chkconfig --level 345 mysql on


copy编译目录的一个脚本设置使mysql每次启动都能自动运行。


# service mysql start


# netstat -atln


//启动mysql服务


//查看3306端口是否打开。要注意在防火墙中开放该端口。


可以用telnet  localhost  3306来测试一下,如果有反映,那就表明安装成功了。

 

<帖子太长,接二楼。>


看来需要换个的人不多啊,呵呵。