MYSQL 库导入 ORACLE 数据库


【听海日志】之 mysql 迁移 oracle 第 1 页 共 31 页 -------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------- 【听海日志】之 mysql 迁移 oracle 第 1 页 共 31 页 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 迁移 oracle 第 2 页 共 31 页 -------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------- 【听海日志】之 mysql 迁移 oracle 第 2 页 共 31 页 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 迁移 oracle 第 3 页 共 31 页 -------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------- 【听海日志】之 mysql 迁移 oracle 第 3 页 共 31 页 安装的第一步会让你选择 JDK,否则无法安装。安装非常简单,这里就不做 说明。 Windowd 64 位 sqldeveloper 下载: http://download.oracle.com/otn/java/sqldeveloper/sqldeveloper64-3.0.04.34-n o-jre.zip Windowd 32 位 sqldeveloper 下载: http://download.oracle.com/auth/otn/java/sqldeveloper/sqldeveloper-3.0.04.3 4.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-wind ows-x64.exe?e=1313726411&h=ff3cc2d66e07d7d63d6f8e9fbabc3743 mysql-connector-java 各版本下载: http://download.softagency.net/mysql/Downloads/Connector-J/ mysql-connector-java 配置: 【听海日志】之 mysql 迁移 oracle 第 4 页 共 31 页 -------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------- 【听海日志】之 mysql 迁移 oracle 第 4 页 共 31 页 以上的 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 迁移 oracle 第 5 页 共 31 页 -------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------- 【听海日志】之 mysql 迁移 oracle 第 5 页 共 31 页 新建 oracle 数据库连接: Sql developer 转换数据时会产生一些字典表,这些字典表会保存到 sql developer 链接 oracle 数据库的用户中,如果这个用户的名字和 Mysql 数据库 名字不同,则 mysql 数据不会保存在该用户下。 点击测试,测试连接: 【听海日志】之 mysql 迁移 oracle 第 6 页 共 31 页 -------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------- 【听海日志】之 mysql 迁移 oracle 第 6 页 共 31 页 点击保存: 点击连接,即可连接到 oracle 数据库: 【听海日志】之 mysql 迁移 oracle 第 7 页 共 31 页 -------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------- 【听海日志】之 mysql 迁移 oracle 第 7 页 共 31 页 新建 mysql 数据库连接: 1.)选择 mysql 选项卡 2.)填写 mysql 数据库信息 【听海日志】之 mysql 迁移 oracle 第 8 页 共 31 页 -------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------- 【听海日志】之 mysql 迁移 oracle 第 8 页 共 31 页 填写完进行测试,成功后点击保存,并连接到 mysql 数据库。 3、复制表 如果不用迁移整个数据,只是迁移表的数据,则可以直接在 mysql 数据库库中选中要转 移的表,点“右键”选“复制到 oracle”即可。此时会把表转移到 sql developer 链接 oracle 数据库的用户下,并且该用户下不能有同名的表。 不过从以往的经验看,复制表要比迁移数据库效率低,所以如果是复制所有的表,最好 用移植数据库功能。 4、移植数据库 点击“工具”,选择“移植” 【听海日志】之 mysql 迁移 oracle 第 9 页 共 31 页 -------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------- 【听海日志】之 mysql 迁移 oracle 第 9 页 共 31 页 移植简介 【听海日志】之 mysql 迁移 oracle 第 10 页 共 31 页 -------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------- 【听海日志】之 mysql 迁移 oracle 第 10 页 共 31 页 【听海日志】之 mysql 迁移 oracle 第 11 页 共 31 页 -------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------- 【听海日志】之 mysql 迁移 oracle 第 11 页 共 31 页 选择要转换的 mysql 数据库,添加到列表中: 【听海日志】之 mysql 迁移 oracle 第 12 页 共 31 页 -------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------- 【听海日志】之 mysql 迁移 oracle 第 12 页 共 31 页 指定转换规则,可以根据自己的情况设定字段属性的转换,也可以新添加规则。 不过一般选择默认的就能满足需求。 【听海日志】之 mysql 迁移 oracle 第 13 页 共 31 页 -------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------- 【听海日志】之 mysql 迁移 oracle 第 13 页 共 31 页 选择目标数据库 【听海日志】之 mysql 迁移 oracle 第 14 页 共 31 页 -------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------- 【听海日志】之 mysql 迁移 oracle 第 14 页 共 31 页 查看转换概要,点击“完成”开始转换 【听海日志】之 mysql 迁移 oracle 第 15 页 共 31 页 -------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------- 【听海日志】之 mysql 迁移 oracle 第 15 页 共 31 页 转换完成后需要检查数据库的各种对象是否完成,状态是否正确,尤其是表的数量一定 要核对,因为有时候有些表会不能成功转换,需要手工操作。 四、修改 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 【听海日志】之 mysql 迁移 oracle 第 16 页 共 31 页 -------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------- 【听海日志】之 mysql 迁移 oracle 第 16 页 共 31 页 ---------- ------------------------------ 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 迁移 oracle 第 17 页 共 31 页 -------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------- 【听海日志】之 mysql 迁移 oracle 第 17 页 共 31 页 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 和 登录系统时的密码改成不一致: 【听海日志】之 mysql 迁移 oracle 第 18 页 共 31 页 -------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------- 【听海日志】之 mysql 迁移 oracle 第 18 页 共 31 页 [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 安全模式的命令参数: skip-grant-tables:grant-tables,授权表。在启动 mysql 时不启动这个表,像忘了密码啥 的,用这个模式启动很方便的。 skip-networking:不监听 3306,说白了就是不启动 mysql 的网络服务。 user=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 相应的 【听海日志】之 mysql 迁移 oracle 第 19 页 共 31 页 -------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------- 【听海日志】之 mysql 迁移 oracle 第 19 页 共 31 页 版本。 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 的数据库文件. 【听海日志】之 mysql 迁移 oracle 第 20 页 共 31 页 -------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------- 【听海日志】之 mysql 迁移 oracle 第 20 页 共 31 页 这个目录是在/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 【听海日志】之 mysql 迁移 oracle 第 21 页 共 31 页 -------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------- 【听海日志】之 mysql 迁移 oracle 第 21 页 共 31 页 # chkconfig --level 345 mysql on copy 编译目录的一个脚本设置使 mysql 每次启动都能自动运行。 # service mysql start # netstat -atln //启动 mysql 服务 //查看 3306 端口是否打开。要注意在防火墙中开放该端口。 可以用 telnet localhost 3306 来测试一下,如果有反映,那就表明安装成功了 七、linux 下修改 mysql 字符集 1.查找 MySQL 的 cnf 文件的位置 [root@localhost ~]# find / -iname '*.cnf' -print /usr/share/mysql/my-innodb-heavy-4G.cnf /usr/share/mysql/my-large.cnf /usr/share/mysql/my-small.cnf /usr/share/mysql/my-medium.cnf /usr/share/mysql/my-huge.cnf /usr/share/texmf/web2c/texmf.cnf /usr/share/texmf/web2c/mktex.cnf /usr/share/texmf/web2c/fmtutil.cnf /usr/share/texmf/tex/xmltex/xmltexfmtutil.cnf /usr/share/texmf/tex/jadetex/jadefmtutil.cnf /usr/share/doc/MySQL-server-community-5.1.22/my-innodb-heavy-4G.cnf /usr/share/doc/MySQL-server-community-5.1.22/my-large.cnf /usr/share/doc/MySQL-server-community-5.1.22/my-small.cnf /usr/share/doc/MySQL-server-community-5.1.22/my-medium.cnf /usr/share/doc/MySQL-server-community-5.1.22/my-huge.cnf 2.新建 my.cnf 文件 拷贝 small.cnf、my-medium.cnf、my-huge.cnf、my-innodb-heavy-4G.cnf 其 中的一个到/etc 下,命名为 my.cnf。 [root@localhost ~]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf 3.修改 my.cnf [root@localhost ~]# vi /etc/my.cnf 在[client]下添加 default-character-set=utf8 在[mysqld]下添加 【听海日志】之 mysql 迁移 oracle 第 22 页 共 31 页 -------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------- 【听海日志】之 mysql 迁移 oracle 第 22 页 共 31 页 default-character-set=utf8 4.重新启动 MySQL [root@localhost ~]# /etc/rc.d/init.d/mysql restart Shutting down MySQL [ 确定 ] Starting MySQL. [ 确定 ] [root@localhost ~]# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.1.22-rc-community-log MySQL Community Edition (GPL) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. 5.查看字符集设置 mysql> show variables like 'collation_%'; +----------------------+-----------------+ | Variable_name | Value | +----------------------+-----------------+ | collation_connection | utf8_general_ci | | collation_database | utf8_general_ci | | collation_server | utf8_general_ci | +----------------------+-----------------+ 3 rows in set (0.02 sec) mysql> show variables like 'character_set_%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.02 sec) 【听海日志】之 mysql 迁移 oracle 第 23 页 共 31 页 -------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------- 【听海日志】之 mysql 迁移 oracle 第 23 页 共 31 页 6.其他的一些设置方法 修改数据库的字符集 mysql>use mydb mysql>alter database mydb character set utf-8; 创建数据库指定数据库的字符集 mysql>create database mydb character set utf-8; 通过配置文件修改: 修改/var/lib/mysql/mydb/db.opt default-character-set=latin1 default-collation=latin1_swedish_ci 为 default-character-set=utf8 default-collation=utf8_general_ci 重起 MySQL: [root@localhost ~]# /etc/rc.d/init.d/mysql restart 通过 MySQL 命令行修改: mysql> set character_set_client=utf8; Query OK, 0 rows affected (0.00 sec) mysql> set character_set_connection=utf8; Query OK, 0 rows affected (0.00 sec) mysql> set character_set_database=utf8; Query OK, 0 rows affected (0.00 sec) mysql> set character_set_results=utf8; Query OK, 0 rows affected (0.00 sec) mysql> set character_set_server=utf8; Query OK, 0 rows affected (0.00 sec) mysql> set character_set_system=utf8; Query OK, 0 rows affected (0.01 sec) mysql> set collation_connection=utf8; Query OK, 0 rows affected (0.01 sec) mysql> set collation_database=utf8; Query OK, 0 rows affected (0.01 sec) mysql> set collation_server=utf8; Query OK, 0 rows affected (0.01 sec) 查看: mysql> show variables like 'character_set_%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | 【听海日志】之 mysql 迁移 oracle 第 24 页 共 31 页 -------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------- 【听海日志】之 mysql 迁移 oracle 第 24 页 共 31 页 | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.03 sec) mysql> show variables like 'collation_%'; +----------------------+-----------------+ | Variable_name | Value | +----------------------+-----------------+ | collation_connection | utf8_general_ci | | collation_database | utf8_general_ci | | collation_server | utf8_general_ci | +----------------------+-----------------+ 3 rows in set (0.04 sec) 7.MYSQL 字符集问题 MySQL 的字符集支持(Character Set Support)有两个方面:字符集(Character set) 和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。 1.MySQL 默认字符集 MySQL 对于字符集的指定可以细化到一个数据库,一张表,一列,应该用什么字符集。 但是,传统的程序在创建数据库和数据表时并没有使用那么复杂的配置,它们用的是默认的 配置,那么,默认的配置从何而来呢? (1)编译 MySQL 时,指定了一个默认的字符集,这个字符集是 latin1; (2)安装 MySQL 时,可以在配置文件 (my.ini) 中指定一个默认的的字符集,如果没指定, 这个值继承自编译时指定的; (3)启动 mysqld 时,可以在命令行参数中指定一个默认的的字符集,如果没指定,这个值 继承自配置文件中的配置,此时 character_set_server 被设定为这个默认的字符集; (4)当创建一个新的数据库时,除非明确指定,这个数据库的字符集被缺省设定为 character_set_server; (5)当选定了一个数据库时,character_set_database 被设定为这个数据库默认的字符集; (6)在这个数据库里创建一张表时,表默认的字符集被设定为 character_set_database, 也就是这个数据库默认的字符集; (7)当在表内设置一栏时,除非明确指定,否则此栏缺省的字符集就是表默认的字符集; 简单的总结一下,如果什么地方都不修改,那么所有的数据库的所有表的所有栏位的都用 latin1 存储,不过我们如果安装 MySQL,一般都会选择多语言支持,也就是说,安装程 序会自动在配置文件中把 default_character_set 设置为 UTF-8,这保证了缺省情况下,所有的数据库的所有表的 所有栏位的都用 UTF-8 存储。 【听海日志】之 mysql 迁移 oracle 第 25 页 共 31 页 -------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------- 【听海日志】之 mysql 迁移 oracle 第 25 页 共 31 页 2.查看默认字符集 默认情况下,mysql 的字符集是 latin1(ISO_8859_1)。通常,查看系统的字符集和排 序方式的设定可以通过下面的两条命令: mysql> SHOW VARIABLES LIKE 'character%'; +--------------------------+---------------------------------+ | Variable_name | Value | +--------------------------+---------------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | D:"mysql-5.0.37"share"charsets" | +--------------------------+---------------------------------+ mysql> SHOW VARIABLES LIKE 'collation_%'; +----------------------+-----------------+ | Variable_name | Value | +----------------------+-----------------+ | collation_connection | utf8_general_ci | | collation_database | utf8_general_ci | | collation_server | utf8_general_ci | +----------------------+-----------------+ 3.修改默认字符集 (1) 最简单的修改方法,就是修改 mysql 的 my.ini 文件中的字符集键值, 如 default-character-set = utf8 character_set_server = utf8 修改完后,重启 mysql 的服务,service mysql restart,查看字符集,发现数据库编 码均已改成 utf8: mysql> SHOW VARIABLES LIKE 'character%'; +--------------------------+---------------------------------+ | Variable_name | Value | +--------------------------+---------------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | D:"mysql-5.0.37"share"charsets" | 【听海日志】之 mysql 迁移 oracle 第 26 页 共 31 页 -------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------- 【听海日志】之 mysql 迁移 oracle 第 26 页 共 31 页 +--------------------------+---------------------------------+ (2) 还有一种修改字符集的方法,就是使用 mysql 的命令 mysql> SET character_set_client = utf8 ; 八、mysql 查看数据库结构 1、查看表信息 mysql> desc 表名; mysql> show columns from 表名; mysql> describe 表名; mysql> show create table 表名; mysql> use information_schema mysql> select * from columns where table_name='表名'; 2、查看数据库 mysql> show databases; mysql> use 数据库名; mysql> show tables; 3、alter table 操作 原有一 unique 索引 AK_PAS_Name(PAC_Name)在表 tb_webparamcounter 中, 执行以下 sql 修改索引 mysql> alter table tb_webparamcounter drop index AK_PAS_Name; mysql> alter table tb_webparamcounter add UNIQUE AK_PAS_Name(PC_ID,PAC_Name); 若发现索引的逻辑不对,还需要再加一个字段进去,执行: mysql> alter table tb_webparamcounter drop index AK_PAS_Name; mysql> alter table tb_webparamcounter add UNIQUE AK_PAS_Name(PC_ID,PAC_Name,PAC_Value); 注意:这时的 PC_ID,PAC_Name,PAC_Value 三个字段不是 FOREIGN KEY,否则 必需先 drop FOREIGN KEY,再重做上一步才行。 4、查看存储过程 mysql> show procedure status; 【听海日志】之 mysql 迁移 oracle 第 27 页 共 31 页 -------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------- 【听海日志】之 mysql 迁移 oracle 第 27 页 共 31 页 九、linux 下 mysql 命令集 1.linux 下启动 mysql [root@localhost ~]# mysqladmin start /ect/init.d/mysql start (前面为 mysql 的安装路径) 2.linux 下重启 mysql [root@localhost ~]# mysqladmin restart /ect/init.d/mysql restart (前面为 mysql 的安装路径) 3.linux 下关闭 mysql 的命令: [root@localhost ~]# mysqladmin shutdown /ect/init.d/mysql shutdown (前面为 mysql 的安装路径) 4.连接本机上的 mysql 进入目录 mysql\bin,再键入命令 mysql -uroot -p, 回车后提示输入密码。 退出 mysql 命令:exit(回车) 5.修改 mysql 密码 mysqladmin -u 用户名 -p 旧密码 password 新密码,或进入 mysql 命令行 SET PASSWORD FOR root=PASSWORD("root"); 6.增加新用户 注意:mysql 环境中的命令后面都带一个分号作为命令结束符。 grant select on 数据库.* to 用户名@登录主机 identified by "密码"。如增加一个用 户 test 密码为 123,让他可以在任何主机上登录, 并对所有数据库有查询、插入、修改、 删除的权限。首先用以 root 用户连入 mysql,然后键入以下命令: grant select,insert,update,delete on *.* to test Identified by "123"; 7.有关 mysql 数据库方面的操作 必须首先登录到 mysql 中,有关操作都是在 mysql 的提示符下进行,而且每个命令以分 【听海日志】之 mysql 迁移 oracle 第 28 页 共 31 页 -------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------- 【听海日志】之 mysql 迁移 oracle 第 28 页 共 31 页 号结束 1、显示数据库列表。 mysql> show databases; 2、显示库中的数据表: mysql> use mysql; //打开库 mysql> show tables; 3、显示数据表的结构: mysql> describe 表名; 4、建库: mysql> create database 库名; 5、建表: mysql> use 库名; mysql> create table 表名(字段设定列表); 6、删库和删表: mysql> drop database 库名; mysql> drop table 表名; 7、将表中记录清空: mysql> delete from 表名; 8、显示表中的记录: mysql> select * from 表名; 9、编码的修改 如果要改变整个 mysql 的编码格式: 启动 mysql 的时候,mysqld_safe 命令行加入 --default-character-set=gbk 如果要改变某个库的编码格式:在 mysql 提示符后输入命令 alter database db_name default character set gbk; 8.数据的导入导出 1、文本数据转到数据库中 文本数据应符合的格式:字段数据之间用 tab 键隔开,null 值用来代替。例: 1 name duty 2006-11-23 数据传入命令 load data local infile "文件名" into table 表名; 2、导出数据库和表 mysqldump --opt news > news.sql(将数据库 news 中的所有表备份到 news.sql 文 件,news.sql 是一个文本文件,文件名任取。) mysqldump --opt news author article > author.article.sql(将数据库 news 中的 author 表和 article 表备份到 author.article.sql 文件, author.article.sql 是一个文本 文件,文件名任取。) mysqldump --databases db1 db2 > news.sql(将数据库 dbl 和 db2 备份到 news.sql 文件,news.sql 是一个文本文件,文件名任取。) mysqldump -h host -u user -p pass --databases dbname > file.dump 就是把 host 上的以名字 user,口令 pass 的数据库 dbname 导入到文件 file.dump 中 mysqldump --all-databases > all-databases.sql ( 将 所 有 数 据 库 备 份 到 【听海日志】之 mysql 迁移 oracle 第 29 页 共 31 页 -------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------- 【听海日志】之 mysql 迁移 oracle 第 29 页 共 31 页 all-databases.sql 文件,all-databases.sql 是一个文本文件,文件名任取。) 3、导入数据 mysql < all-databases.sql(导入数据库) mysql>source news.sql;(在 mysql 命令下执行,可导入表) 9.连接 MySQL 格式: mysql -h 主机地址 -u 用户名 -p 用户密码 1、例 1:连接到本机上的 MYSQL。 首先在打开 DOS 窗口,然后进入目录 mysqlbin,再键入命令 mysql -uroot -p,回 车后提示你输密码,如果刚安装好 MYSQL,超级用户 root 是没有密码的,故直接回车即 可进入到 MYSQL 中了,MYSQL 的提示符是: mysql>。 2、例 2:连接到远程主机上的 MYSQL。假设远程主机的 IP 为:110.110.110.110,用 户名为 root,密码为 abcd123。则键入以下命令: mysql -h110.110.110.110 -uroot -pabcd123 (注:u 与 root 可以不用加空格,其它也一样) 3、退出 MYSQL 命令: exit (回车)。 11.修改密码 格式:mysqladmin -u 用户名 -p 旧密码 password 新密码 1、例 1:给 root 加个密码 ab12。首先在 DOS 下进入目录 mysqlbin,然后键入以下命 令: mysqladmin -uroot -password ab12 注:因为开始时 root 没有密码,所以-p 旧密码一项就可以省略了。 2、例 2:再将 root 的密码改为 djg345。 mysqladmin -uroot -pab12 password djg345 12.增加新用户 注意:和上面不同,下面的因为是 MySQL 环境中的命令,所以后面都带一个分号作为 命令结束符。 格式:grant select on 数据库.* to 用户名@登录主机 identified by \"密码\" 例 1、增加一个用户 test1 密码为 abc,让他可以在任何主机上登录,并对所有数据库有查 询、插入、修改、删除的权限。首先用以 root 用户连入 MySQL,然后键入以下命令: grant select,insert,update, delete on *.* to test1@\"%\" Identified by \"abc\"; 但例 1 增加的用户是十分危险的,你想如某个人知道 test1 的密码,那么他就可以在 internet 上的任何一台电脑上登录你的 MySQL 数据库并对你的数据可以为所欲为了,解 决办法见例 2。 例 2、增加一个用户 test2 密码为 abc,让他只可以在 localhost 上登录,并可以对数据库 mydb 进行查询、插入、修改、删除的操作 (localhost 指本地主机,即 MySQL 数据库 【听海日志】之 mysql 迁移 oracle 第 30 页 共 31 页 -------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------- 【听海日志】之 mysql 迁移 oracle 第 30 页 共 31 页 所在的那台主机),这样用户即使用知道 test2 的密码,他也无法从 internet 上直接访问数 据 库,只能通过 MySQL 主机上的 web 页来访问。 grant select,insert,update, delete on mydb.* to test2@localhost identified by \"abc\"; 如果你不想 test2 有密码,可以再打一个命令将密码消掉。 grant select,insert,update,delete on mydb.* to test2@localhost identified by \"\"; 十、linux mysql 常见问题 1、Access denied for user 'root'@'localhost' 系统是 ubuntu6.06,最近新装好的 mysql 在进入 mysql 工具时,总是有错误提示: # mysql -uroot -p Enter password: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 使用网上介绍的方法修改 root 用户的密码: # mysqladmin -uroot -p password 'newpassword' Enter password: mysqladmin: connect to server at 'localhost' failed error: 'Access denied for user 'root'@'localhost' (using password: YES)' 现在终于被我找到了解决方法,如下(请先测试方法三): 方法一: # /etc/init.d/mysql stop # mysqld_safe --user=mysql --skip-grant-tables --skip-networking & # mysql -u root mysql mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root'; mysql> FLUSH PRIVILEGES; mysql> quit # /etc/init.d/mysql restart # mysql -uroot -p Enter password: <输入新设的密码 newpassword> mysql> 方法二: 直接使用/etc/mysql/debian.cnf 文件中[client]节提供的用户名和密码: # mysql -udebian-sys-maint -p Enter password: <输入[client]节的密码> mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root'; mysql> FLUSH PRIVILEGES; mysql> quit 【听海日志】之 mysql 迁移 oracle 第 31 页 共 31 页 -------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------- 【听海日志】之 mysql 迁移 oracle 第 31 页 共 31 页 # mysql -uroot -p Enter password: <输入新设的密码 newpassword> mysql> 方法三: # mysql -uroot -p Enter password: <输入/etc/mysql/debian.cnf 文件中[client]节提供的密码> 至此,问题解决! 2、sqlplus 连接 mysql 无 法 查 询 null 字段,在$ORACLE_HOME/hs/admin/initmysql.ora 文 件 中 加 入 : HS_FDS_SQLLEN_INTERPRETATION=32 即可。 不能直接访问 mysql 的 int 字段。在$ORACLE_HOME/hs/admin/initmysql.ora 文件中加 入:HS_FDS_FETCH_ROWS=1 即可。
还剩30页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 10 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

retaweb

贡献于2014-09-03

下载需要 10 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf