MYSQL数据库迁移到ORACLE数据库

MYSQL数据库迁移到ORACLE数据库

1、环境和需求
一、环境 html

MySQL数据库服务器:java

OS version:linux 5.3 for 64 bitnode

Mysql Server version: 5.0.45mysql

Oracle数据库服务器:linux

OS version:linux 5.3 for 64 bitweb

Oracle version:oracle 11g r2sql

二、需求数据库

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

2、mysql数据恢复windows

       采用先把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数据库,则这一步能够省略。

3、经过oracel sql developer转换数据库

       Mysql转到oracle数据库,要根据不一样状况选择不一样的方法:

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

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

二、  从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表空间爆满影响数据导入。

一、安装oracel sql developer

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

11.jpg

 

    安装的第一步会让你选择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配置:

12.jpg

 

13.jpg

 

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

    若是要链接sql server,则下载jtds-1.2.5-dist.zip配置便可。

二、链接数据库

       链接oracle的用户要有create table权限,通常用system用户就能够。连mysql数据库由于是读取数据,用什么用户均可以(通常默认是root用户)。

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

打开sqldeveloper.exe:

14.jpg

 

新建oracle数据库链接:

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

15.jpg

 

点击测试,测试链接:

16.jpg

 

点击保存:

17.jpg

 

点击链接,便可链接到oracle数据库:

18.jpg

 

新建mysql数据库链接:

1.)选择mysql选项卡

19.jpg

 

2.)填写mysql数据库信息

20.jpg

 

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

21.jpg

 

三、复制表

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

       不过从以往的经验看,复制表要比迁移数据库效率低,因此若是是复制全部的表,最好用移植数据库功能。

四、移植数据库

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

22.jpg

 

移植简介

23.jpg

 

24.jpg

 

25.jpg

 

26.jpg

 

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

27.jpg

 

28.jpg

 

指定转换规则,能够根据本身的状况设定字段属性的转换,也能够新添加规则。不过通常选择默认的就能知足需求。

29.jpg

 

选择目标数据库

30.jpg

 

31.jpg

 

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

32.jpg

 

33.jpg

 

34.jpg

 

       转换完成后须要检查数据库的各类对象是否完成,状态是否正确,尤为是表的数量必定要核对,由于有时候有些表会不能成功转换,须要手工操做。

4、修改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;

一、 查看用户的user#

SQL> show user

USER is "SYSTEM"

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

      USER# NAME

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

        93 TEST

二、修改用户名

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

   已更新 1 行。

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

三、提交完成

SQL> COMMIT;

四、修改系统检查点

SQL> ALTER SYSTEM CHECKPOINT;

五、修改新用户密码

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

六、若是提示新用户不存在,则刷新shared_pool

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

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

SQL> ALTER SYSTEM FLUSH SHARED_POOL;

七、刷新shared_pool后从新修改用户密码

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

八、测试链接

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

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

SQL> SELECT * FROM TAB;

5、mysql远程链接一、改表法

       多是你的账号不容许从远程登录,只能在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;

二、受权法

例如,你想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使修改生效,就能够了。

三、另一种方法

  在安装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的例外。

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

在用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安全模式的命令参数:

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

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

       user=mysql:这俺就不形容了。

6、linux下mysql卸载和安装一、MySQL RPM版本的安装及卸载

一、前期准备

       因为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没有密码因此能够直接进入。

二、           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来测试一下,若是有反映,那就代表安装成功了。

 

7、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]下添加

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)

 

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                        |

| 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 存储。

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" |

+--------------------------+---------------------------------+

(2) 还有一种修改字符集的方法,就是使用mysql的命令

mysql> SET character_set_client = utf8 ;

8、mysql查看数据库结构一、查看表信息

mysql> desc 表名;

mysql> show columns from 表名;

mysql> describe 表名;

mysql> show create table 表名;

mysql> use information_schema

mysql> select * from columns where table_name='表名';

二、查看数据库

mysql> show databases;

mysql> use 数据库名;

mysql> show tables;

三、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,再重作上一步才行。

四、查看存储过程

mysql> show procedure status;

9、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> show databases;

二、显示库中的数据表:

mysql> use mysql; //打开库

mysql> show tables;

三、显示数据表的结构:

mysql> describe 表名;

四、建库:

mysql> create database 库名;

五、建表:

mysql> use 库名;

mysql> create table 表名(字段设定列表);

六、删库和删表:

mysql> drop database 库名;

mysql> drop table 表名;

七、将表中记录清空:

mysql> delete from 表名;

八、显示表中的记录:

mysql> select * from 表名;

九、编码的修改

若是要改变整个mysql的编码格式:  

启动mysql的时候,mysqld_safe命令行加入  

--default-character-set=gbk  

若是要改变某个库的编码格式:在mysql提示符后输入命令  

alter database db_name default character set gbk;

8.数据的导入导出

一、文本数据转到数据库中

       文本数据应符合的格式:字段数据之间用tab键隔开,null值用来代替。例:

  1 name duty 2006-11-23

  数据传入命令 load data local infile "文件名" into table 表名;

二、导出数据库和表

  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(将全部数据库备份到all-databases.sql文件,all-databases.sql是一个文本文件,文件名任取。)

三、导入数据

mysql < all-databases.sql(导入数据库)

mysql>source news.sql;(在mysql命令下执行,可导入表)

9.链接MySQL  

  格式: mysql -h主机地址 -u用户名 -p用户密码

一、例1:链接到本机上的MYSQL。

       首先在打开DOS窗口,而后进入目录 mysqlbin,再键入命令mysql -uroot -p,回车后提示你输密码,若是刚安装好MYSQL,超级用户root是没有密码的,故直接回车便可进入到MYSQL中了,MYSQL的提示符是: mysql>。

二、例2:链接到远程主机上的MYSQL。假设远程主机的IP为:110.110.110.110,用户名为root,密码为abcd123。则键入如下命令:

       mysql -h110.110.110.110 -uroot -pabcd123

       (注:u与root能够不用加空格,其它也同样)

三、退出MYSQL命令: exit (回车)。

11.修改密码

       格式:mysqladmin -u用户名 -p旧密码 password 新密码

一、例1:给root加个密码ab12。首先在DOS下进入目录mysqlbin,而后键入如下命令:

       mysqladmin -uroot -password ab12

       注:由于开始时root没有密码,因此-p旧密码一项就能够省略了。

二、例2:再将root的密码改成djg345。

       mysqladmin -uroot -pab12 password djg345

12.增长新用户

       注意:和上面不一样,下面的由于是MySQL环境中的命令,因此后面都带一个分号做为命令结束符。

       格式:grant select on 数据库.* to 用户名@登陆主机 identified by \"密码\"

例一、增长一个用户test1密码为abc,让他能够在任何主机上登陆,并对全部数据库有查询、插入、修改、删除的权限。首先用以root用户连入MySQL,而后键入如下命令:

grant select,insert,update,

delete on *.* to test1@\"%\" Identified by \"abc\";

       但例1增长的用户是十分危险的,你想如某我的知道test1的密码,那么他就能够在internet上的任何一台电脑上登陆你的MySQL数据库并对你的数据能够随心所欲了,解决办法见例2。

例二、增长一个用户test2密码为abc, 让他只能够在localhost上登陆,并能够对数据库mydb进行查询、插入、修改、删除的操做(localhost指本地主机,即MySQL数据库所 在的那台主机),这样用户即便用知道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 \"\";

10、linux mysql常见问题一、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 -uroot -p

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

mysql>

方法三:

# mysql -uroot -p

Enter password: <输入/etc/mysql/debian.cnf文件中[client]节提供的密码>

       至此,问题解决!

二、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便可。

 

 

转自:http://www.itpub.net/thread-1586924-1-1.html

相关文章
相关标签/搜索