一、环境和需求
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。
安装的第一步会让你选择JDK,否则无法安装。安装非常简单,这里就不做说明。
Windowd 64位sqldeveloper下载:
http://download.oracle.com/otn/java/sqldeveloper/sqldeveloper64-3.0.04.34-no-jre.zip
Windowd 32位sqldeveloper下载:
安装JDK和mysql-connector-java:
jdk-6u27-windows-x64.exe下载地址(最第要用jdk-6u11以后的版本):
mysql-connector-java各版本下载:
http://download.softagency.net/mysql/Downloads/Connector-J/
mysql-connector-java配置:
以上的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:
新建oracle数据库连接:
Sql developer转换数据时会产生一些字典表,这些字典表会保存到sql developer链接oracle数据库的用户中,如果这个用户的名字和Mysql数据库名字不同,则mysql数据不会保存在该用户下。
点击测试,测试连接:
点击保存:
点击连接,即可连接到oracle数据库:
新建mysql数据库连接:
1.)选择mysql选项卡
2.)填写mysql数据库信息
填写完进行测试,成功后点击保存,并连接到mysql数据库。
如果不用迁移整个数据,只是迁移表的数据,则可以直接在mysql数据库库中选中要转移的表,点“右键”选“复制到oracle”即可。此时会把表转移到sql developer链接oracle数据库的用户下,并且该用户下不能有同名的表。
不过从以往的经验看,复制表要比迁移数据库效率低,所以如果是复制所有的表,最好用移植数据库功能。
4、移植数据库点击“工具”,选择“移植”
移植简介
选择要转换的mysql数据库,添加到列表中:
指定转换规则,可以根据自己的情况设定字段属性的转换,也可以新添加规则。不过一般选择默认的就能满足需求。
选择目标数据库
查看转换概要,点击“完成”开始转换
转换完成后需要检查数据库的各种对象是否完成,状态是否正确,尤其是表的数量一定要核对,因为有时候有些表会不能成功转换,需要手工操作。
四、修改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安全模式的命令参数:
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相应的版本。
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来测试一下,如果有反映,那就表明安装成功了。
一、环境和需求
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。
安装的第一步会让你选择JDK,否则无法安装。安装非常简单,这里就不做说明。
Windowd 64位sqldeveloper下载:
http://download.oracle.com/otn/java/sqldeveloper/sqldeveloper64-3.0.04.34-no-jre.zip
Windowd 32位sqldeveloper下载:
安装JDK和mysql-connector-java:
jdk-6u27-windows-x64.exe下载地址(最第要用jdk-6u11以后的版本):
mysql-connector-java各版本下载:
http://download.softagency.net/mysql/Downloads/Connector-J/
mysql-connector-java配置:
以上的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:
新建oracle数据库连接:
Sql developer转换数据时会产生一些字典表,这些字典表会保存到sql developer链接oracle数据库的用户中,如果这个用户的名字和Mysql数据库名字不同,则mysql数据不会保存在该用户下。
点击测试,测试连接:
点击保存:
点击连接,即可连接到oracle数据库:
新建mysql数据库连接:
1.)选择mysql选项卡
2.)填写mysql数据库信息
填写完进行测试,成功后点击保存,并连接到mysql数据库。
3、复制表
如果不用迁移整个数据,只是迁移表的数据,则可以直接在mysql数据库库中选中要转移的表,点“右键”选“复制到oracle”即可。此时会把表转移到sql developer链接oracle数据库的用户下,并且该用户下不能有同名的表。
不过从以往的经验看,复制表要比迁移数据库效率低,所以如果是复制所有的表,最好用移植数据库功能。
4、移植数据库
点击“工具”,选择“移植”
移植简介
选择要转换的mysql数据库,添加到列表中:
指定转换规则,可以根据自己的情况设定字段属性的转换,也可以新添加规则。不过一般选择默认的就能满足需求。
选择目标数据库
查看转换概要,点击“完成”开始转换
转换完成后需要检查数据库的各种对象是否完成,状态是否正确,尤其是表的数量一定要核对,因为有时候有些表会不能成功转换,需要手工操作。
四、修改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安全模式的命令参数:
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相应的版本。
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来测试一下,如果有反映,那就表明安装成功了。
七、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 ;
八、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;
九、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的提示符下进行,而且每个命令以分号结束
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(将所有数据库备份到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数据库所在的那台主机),这样用户即使用知道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 -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即可。
七、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 ;
八、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;
九、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的提示符下进行,而且每个命令以分号结束
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(将所有数据库备份到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数据库所在的那台主机),这样用户即使用知道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 -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即可。