发新话题
打印

[TIPS]Some Teach Topics about MySQL

[TIPS]Some Teach Topics about MySQL

信息来源:邪恶八进制 中国

本主题记录一些MySQL数据库的使用技巧 TIPS里不准做任何形式的灌水
谢谢合作....

欢迎大家跟帖参与完善:)
在得到的同时害怕燃烧,在不需要回忆的时光里什么才是我最想要的,在这个年代最想要的东西永远不要去等太久

TOP

本笔记使用全部大写表示>mysql环境下的命令语句。

创建一个样例数据库和这个数据库中的表,然后增加、检索、删除和修改信息与数据库进行交互。
在操作这个样例数据库的过程中,将能学到下列东西:
■ 如何利用mysql 客户机程序与MySQL 通信。
■ SQL 语言的基本语句。
连接服务器例:c:\mysql\bin\mysql -h host_name -u user_name -p

测试服务存在否:-h为主机名,测试本地服务可省略。mysqladmin一般地在bin目录下,我这里用的是一个客户端,显示如下则服务存在。
D:\mysql>mysqladmin ping [-h]
mysqld is alive

中断查询:Ctrl + C

使用数据库涉及几个步骤:
1) 创建(初始化)数据库。
2) 创建数据库中的表。
3) 对表进行数据插入、检索、修改或删除。

检索现有数据是对数据库执行的最简单且常见的操作。
另外几个最简单且常见的操作是插入新数据、更新或删除现有数据。较少使用的操作是创建表的操作,而最不常用的操作是创建数据库。

创建新数据库:CREATE DATABASE database_name;
删除数据库:DROP DATABASE database_name;

修改表:
增加字段:mysql> ALTER TABLE table_name ADD field_name field_type;
查看表:mysql> SELECT * FROM table_name;
修改原字段名称及类型:mysql> ALTER TABLE table_name CHANGE old_field_name new_field_name field_type;
删除字段:ALTER TABLE table_name DROP field_name;

修改更新记录:mysql> UPDATE table_name SET field_name=\"values\" WHERE select_field_name=\"values\";
添加新记录: mysql> INSERT INTO table_name VALUES (\"values1\",\"values2\",……,\"valuesN\");
删除记录: mysql> DELETE FROM table_name WHERE select_field_name=\"values\";

显示记录:
显示所有字段:mysql> SELECT * FROM table_name;
显示特定字段:mysql> SELECT values1,values2,……valuesN FROM table_name;
显示特定条件的记录(所有字段):mysql> SELECT * FROM table_name WHERE select_field_name=\"values\";
显示特定条件的记录(指定字段):mysql> SELECT values1,values2,……valuesN FROM table_name WHERE select_field_name=\"values\";

TOP

MYSQL数据表的维护与修补  
MySQL中供了两个工具:
myisamchk:用来检查MyISAM数据表的工具。
isamchk:用来检查isam数据表的工具。
这两个可以让我们来检查数据表的正确性。
myisamchk和isamchk的使用方法为:
myisamchk options table
isamchk options table
最简单的使用方法是直接加上数据表文件名字
isamchk *.ism
另外,不能用myisamchk检查ISAM的数据表,否则会出现错误消息。
直接加上数据表文件的检查方式只对数据表做一般检查,因此检查的速度比较快,利用这种方式检查数据表时,如果没有错误,并不代表。如果要对数据表做彻底的检查,可以加上--extend-check参数:
myisamchk --extend-check *.myi
isamchk *.ism
这样,就可以对数据表进行彻底检查了。

如何修护数据表

如果数据表有问题,可以用--recover--quick参数做修补的工作
如果上面的方法不能解决问题,可以将--quick参去掉试试
在得到的同时害怕燃烧,在不需要回忆的时光里什么才是我最想要的,在这个年代最想要的东西永远不要去等太久

TOP

如何恢复MYSQL的ROOT口令
1. 向mysqld server 发送kill命令关掉mysqld server(不是 kill -9),存放进程ID的文件通常在MYSQL的数据库所在的目录中。
kill `cat /mysql-data-directory/hostname.pid`
你必须是UNIX的root用户或者是你所运行的SERVER上的同等用户,才能执行这个操作。

2. 使用
`--skip-grant-tables'
参数来启动 mysqld。

3. 使用
`mysql -h hostname mysql'
命令登录到mysqld server ,用grant命令改变口令。你也可以这样做:
`mysqladmin -h hostname -u user password 'new
password''。
(其实也可以用
use mysql; update user set password =password('yourpass') where user='root'
来做到。)

4. 载入权限表:
`mysqladmin -h hostname flush-privileges'
,或者使用 SQL 命令
`FLUSH PRIVILEGES'
。(当然,在这里,你也可以重启mysqld。)
在得到的同时害怕燃烧,在不需要回忆的时光里什么才是我最想要的,在这个年代最想要的东西永远不要去等太久

TOP

MySql 中如何为用户设置密码   

  当初次在机器上安装完Mysql时,你可以匿名进行访问数据库或者以不带口令的root身份进入数据库.另外如果你是一个管理员,

  你还要进行一些用户的建立及授权,这又涉及到设置密码的问题.下面我们就讨论一下如何设置密码:

  首先我们应该知道Mysql数据库中的口令存储必须用password()函数加密它.因为在user表中是以加密形式存储口令,而不是作

  为纯文本.如果你没有加密,直接在数据库中执行以下语句:

  use mysql

  insert into user (host,user,password) values('%','user_name','your password');

  flush privileges;

  相信结果不会让你满意.因为服务器比较的是加密的值,所以服务器连接一定失败.这里需要说明的是flush privileges;这条

  命令起到了重新加载授权表.你也可以在shell下直接用mysqladmin -u root reload或者mysqladmin -u root flush-privileges来

  实现重载授权表.

  在Mysql环境下,你可以使用以下语句进行设置密码:

  1.insert into user(host,user,password) values('%','user_name',password("your password");

  2.set password for user_name = password("your password")

  以上两种方法都必须进行重载授权表.

  3.当然你也可以在创建一个用户时直接设置密码,grant语句将为你自动加密口令.

  如

  grant all on *.* to user_name@% identified by "your password";

  另外你也可以在shell环境下用mysqladmin程序来设置密码

  如

  mysqladmin -u root password "your password"

  快点去试一下,没问题吧!
在得到的同时害怕燃烧,在不需要回忆的时光里什么才是我最想要的,在这个年代最想要的东西永远不要去等太久

TOP

关于这个问题,想必困扰新手很久了.
网上的讨论很多,解决方法也很多,有人说一个一个字段修改编码.(累死了)
提供一个最好的解决方法吧:

如果你的数据库需要从旧的导入到新的4.1中,那么在导入文件最开始加上一行

Set Names 'gb2312';

如果你不想修改数据表的结构,继续使用mysql,请在连接mysql之后,执行
Set Names 'gb2312';

当然,用mysql_query()执行它.接下来,你就可以继续使用你的mysql了.完全不用担心乱码问题的出现.
在得到的同时害怕燃烧,在不需要回忆的时光里什么才是我最想要的,在这个年代最想要的东西永远不要去等太久

TOP

当你连接一个MySQL服务器时,你通常应该使用一个口令。口令不以明文在连接上传输。

所有其它信息作为能被任何人读懂的文本被传输。如果你担心这个,你可使用压缩协议(MySQL3.22和以上版本)使事情变得更难。甚至为了使一切更安全,你应该安装ssh(见http://www.cs.hut.fi/ssh)。用它,你能在一个MySQL服务器与一个MySQL客户之间得到一个加密的TCP/IP连接。

为了使一个MySQL系统安全,强烈要求你考虑下列建议:

对所有MySQL用户使用口令。记住,如果other_user没有口令,任何人能简单地用mysql -u other_user db_name作为任何其它的人登录。对客户机/服务器应用程序,客户可以指定任何用户名是常见的做法。在你运行它以前,你可以通过编辑mysql_install_db脚本改变所有用户的口令,或仅仅MySQL root的口令,象这样:
shell> mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('new_password')
WHERE user='root';
mysql> FLUSH PRIVILEGES;

不要作为Unix的root用户运行MySQL守护进程。mysqld能以任何用户运行,你也可以创造一个新的Unix用户mysql使一切更安全。如果你作为其它Unix用户运行mysqld,你不需要改变在user表中的root用户名,因为MySQL用户名与Unix 用户名没关系。你可以作为其它Unix用户编辑mysql.server启动脚本mysqld。通常这用su命令完成。对于更多的细节,见18.8 怎样作为一个一般用户运行MySQL。
如果你把一个Unix root用户口令放在mysql.server脚本中,确保这个脚本只能对root是可读的。
检查那个运行mysqld的Unix用户是唯一的在数据库目录下有读/写权限的用户。
不要把process权限给所有用户。mysqladmin processlist的输出显示出当前执行的查询正文,如果另外的用户发出一个UPDATE user SET password=PASSWORD('not_secure')查询,被允许执行那个命令的任何用户可能看得到。mysqld为有process权限的用户保留一个额外的连接, 以便一个MySQL root用户能登录并检查,即使所有的正常连接在使用。
不要把file权限给所有的用户。

有这权限的任何用户能在拥有mysqld守护进程权限的文件系统那里写一个文件!为了使这更安全一些,用SELECT ... INTO OUTFILE生成的所有文件对每个人是可读的,并且你不能覆盖已经存在的文件。

file权限也可以被用来读取任何作为运行服务器的Unix用户可存取的文件。这可能被滥用,例如,通过使用LOAD DATA装载“/etc/passwd”进一个数据库表,然后它能用SELECT被读入。

如果你不信任你的DNS,你应该在授权表中使用IP数字而不是主机名。原则上讲,--secure选项对mysqld应该使主机名更安全。在任何情况下,你应该非常小心地使用包含通配符的主机名。
在得到的同时害怕燃烧,在不需要回忆的时光里什么才是我最想要的,在这个年代最想要的东西永远不要去等太久

TOP

SQL数据库日志文件已满 怎么删除

by angelz
1.清空日志
DUMP  TRANSACTION  库名  WITH  NO_LOG   

2.收缩数据库文件(如果不压缩,数据库的文件不会减小
企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件
  --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
  --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了
曾几何时,有人对我说:装B遭雷劈。我说:去你妈的。于是,这个人又对我说:如果再说脏话,上帝会惩罚你的。我说:我操上帝。结论:彪悍的人生不需要上帝。

TOP

在MySQL中弄丢了root密码怎么弥补

丢了密码是非常痛心的事情,尤其是root密码丢了:( 。自己装装玩的丢了也就丢了,但是万一是服务器挂了麻烦可就大了!现在假设是由于被入侵造成的root密码丢失。这里我谈一下我自己对这样一个问题的看法。首先遇到这种问题我们没有必要慌张,整个恢复过程也是很简单的。

1 下载MySQL源码分发包,不用区分操作系统,我们需要的东西是一样的。

2 重命名自己的mysql的data目录下的mysql文件夹为oldmysql。

3 将源码包中data目录下的mysql目录复制到你的mysql的data目录下。

4 重新启动mysql,现在mysql的授权关系同全新安装的一样,空密码登陆,然后自行调整授权。

5 打开oldmysql这个库检查到底出现了什么问题。

6 如果有备份对系统中原有的数据库进行完整性检测,以免被人修改。

通过上述6个步骤已经可以完全恢复你对mysql的控制,重点就是最后两步检查对方对改了那些权限,以及数据的完整性检测。
...退出这个无聊的娱乐圈!

TOP

复制内容到剪贴板
代码:
这种情况大多数是因为你的mysql是使用rpm方式安装的,它会自动寻找 /var/lib/mysql/mysql.sock 这个文件,
通过unix socket登录mysql。
常见解决办法如下:
1、
创建/修改文件 /etc/my.cnf,至少增加/修改一行
[mysql]
[client]
socket = /tmp/mysql.sock
#在这里写上你的mysql.sock的正确位置,通常不是在 /tmp/ 下就是在 /var/lib/mysql/ 下

2、
指定IP地址,使用tcp方式连接mysql,而不使用本地sock方式
#mysql -h127.0.0.1 -uuser -ppassword

3、
为 mysql.sock 加个连接,比如说实际的mysql.sock在 /tmp/ 下,则
#ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock即可
...退出这个无聊的娱乐圈!

TOP

可以不需要修改my.ini。在建立数据库的时候,对库和表的字符集设置不太重要,但是对文本类型的字段最好都设置为GBK字符集。 对于已有的数据库可以用以下方法转换字段编码: ALTER TABLE t MODIFY hoverfly BINARY(100); ALTER TABLE t MODIFY hoverfly CHAR(100) CHARACTER SET gbk; 注意用此方法如果不修改程序,会发现查询出的结果都是乱码,可以通过在my.ini的[mysqld]段内加default-character-set=gbk来纠正。但是这样你会发现那些没有转换编码的文本字段里的中文都是乱码。 其实有更简单的办法,在进行查询前,只要执行SET character_set_results = NULL就可以。而且这是不管是转换了的还是没转换的字段都不会出现乱码。而转换了的字段可以正常的对中文进行排序。
...退出这个无聊的娱乐圈!

TOP

工作在非常大的表上时,你可能偶尔需要运行很多查询获得一个大量数据的小的子集,不是对整个表运行这些查询,而是让MySQL每次找出所需的少数记录,将记录选择到一个临时表可能更快些,然后多这些表运行查询。

创建临时表很容易,给正常的CREATE TABLE语句加上TEMPORARY关键字:

CREATE TEMPORARY TABLE tmp_table (

name VARCHAR(10) NOT NULL,

value INTEGER NOT NULL

)

临时表将在你连接MySQL期间存在。当你断开时,MySQL将自动删除表并释放所用的空间。当然你可以在仍然连接的时候删除表并释放空间。

DROP TABLE tmp_table

如果在你创建名为tmp_table临时表时名为tmp_table的表在数据库中已经存在,临时表将有必要屏蔽(隐藏)非临时表tmp_table。

如果你声明临时表是一个HEAP表,MySQL也允许你指定在内存中创建它:

CREATE TEMPORARY TABLE tmp_table (

name VARCHAR(10) NOT NULL,

value INTEGER NOT NULL

) TYPE = HEAP

因为HEAP表存储在内存中,你对它运行的查询可能比磁盘上的临时表快些。然而,HEAP表与一般的表有些不同,且有自身的限制。详见MySQL参考手册。

正如前面的建议,你应该测试临时表看看它们是否真的比对大量数据库运行查询快。如果数据很好地索引,临时表可能一点不快。

...退出这个无聊的娱乐圈!

TOP

一. 显示字符集
mysqladmin -uroot -proot variables | grep character

| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/share/mysql/charsets/ |

数据库缺省使用latin1 (ISO-8859)


二. 配置字符集

1. 建库时配置字符集

create database testxxx default charset=utf8

3. 建表时配置字符集

CREATE TABLE `t_agent` (
`ID` smallint(5) NOT NULL
) DEFAULT CHARSET=utf8 ;

4. 修改字符集

Windows平台
windows下的mysql配置文件是my.ini,一般在c:\windows\my.ini或者c:\winnt\my.ini可以直接在这个文件里面加上
default-character-set=gbk #或gb2312,big5,utf8
然后重新启动mysql
service mysql restart

/etc/init.d/mysql restart
或用其他方法重新启动,就生效了。

[编辑]Unix平台
linux下的mysql配置文件是my.cnf,一般是/etc/my.cnf,如果找不到可以用find命令找一下:
find / -iname my.cnf
在这个文件里面加上
default-character-set=gbk #或gb2312,big5,utf8
然后重新启动mysql

三. 配置排序字符集

myisamchk -r -q --set-character-set=charset
...退出这个无聊的娱乐圈!

TOP

发新话题