MySQL Tips(更新中)

By | 2010-10-21

使用MySQL也已经有好多年了,Paul Dubois的那本MySQL (Developer’s Library)当年也从头到尾的翻了好多好多遍。但是由于各种原因,没有总结留下任何东西。以前使用MySQL都用的C API,最近打算开始学习PHP,自然离不开MySQL,所以打算把这些年学习的MySQL的相关知识总结一下,写在这篇文章中。既然命名为Tips,那么就要有Tips的样子,我的目标是短小精悍,那么就不可能长篇的议论,我打算通过一种舒服的方式,把MySQL常用功能和API总结出来,在过很久之后看的时候,能够立即回想起来MySQL的一些知识要点,快速的进入开发状态之中。

1. 安装

在使用MySQL之前,最先要做的就是安装。在Windows上的安装我就不说了,非常简单直接。这里说一下在Linux/UNIX系统上的安装。

当然,我指的是编译安装。使用apt或者yum安装MySQL的同学们可以不看这部分内容了。首先,在一个空白的系统上,需要安装gcc,gcc-c++,ncurses-devel,这是在CentOS 5.4上的包名称,使用其他发行版的同学,自己查找一下这三个包对应的名称,安装就可以了。去MySQL的官方网站下载MySQL源码包吧。

configure的时候需要一些参数,这些参数可以./configure –help查看说明,也可以去官方网站查询文档,这里我记录一下自己选用的一些参数含义。

静态编译

–enable-static
–with-client-ldflags=-all-static
–with-mysqld-ldflags=-all-static

静态编译选项,据说可以提高性能13%,没有测试过。

以线程方式编译客户端

–enable-thread-safe-client

 

去掉innodb表支持

–without-innodb innodb是一种支持事务处理的表,适合企业级应用。

去掉isam表类型支持

–without-isam isam表是一种依赖平台的表,现在很少用了。
取消导航调试 –without-ndb-debug  
日志文件目录 –localstatedir=/usr/local/mysql/var/  
MySQL后缀名 –with-server-suffix=-enterprise-gpl 在用mysql登录的时候在版本号的后面可以看到。
去除诊断模式 –without-debug 如果用–with-debug=full编译,大多数查询慢20%。
大表支持 –with-big-tables  
字符集 –with-extra-charsets=gbk,gb2312,utf8 设置支持gbk,gb2312,utf8字符集。
强制使用pthread库 –with-pthread POSIX线程库。
汇编 –enable-assembler  
默认字符集 –with-charset=utf8  
使用unix套接字 –with-unix-socket-path=/tmp/mysql.sock 据说提高7.5%性能连接性能,所以在windows下mysql性能肯定不如unix。
端口 –with-tcp-port=3306 指定MySQL服务将监听TCP 3306端口。

 

对于大部分应用来说,上面的参数基本不用设置。对于中国用户来说,则最多需要设置一下字符集。

我的configure命令:

./configure –with-charset=utf8 -with-extra-charsets=all –prefix=/home/mysql

当然,这个命令的前提是系统中要有一个/home/mysql的文件夹,我是用创建一个名称为mysql的用户来做到这点的,而且,configure命令也是使用mysql用户运行的,添加一个mysql用户的命令很简单,下面这句可以直接复制粘贴。

sudo useradd -m -c "MySQL Server" -d /home/mysql -s /bin/bash -u 502 mysql

然后make && make install,再更改下权限:sudo chown mysql:mysql -R mysql 。

2. 配置

安装好了之后,需要运行mysql_install_db来初始化数据库。这个命令可以有不少参数,下面列一下。

–basedir=/usr/local/mysql 默认mysql路径
–datadir=/usr/local/mysql/data 默认mysql数据路径
–user=mysql 默认使用mysql服务用户
–defaults-file=/usr/local/mysql/my.cnf 默认配置文件
–pid-file=/usr/local/mysql/mysql.pid 默认PID文件路径

 

另外,MySQL配置文件命名为my.cnf,存储的位置和读取顺序在这里做一个说明。

文件名 说明
/etc/my.cnf 全局选项
$MYSQL_HOME/my.cnf 服务器相关选项
defaults-extra-file 服务器启动时用–defaults-extra-file=path指定的文件
~/.my.cnf 用户相关选项

 

MYSQL_HOME是一个环境变量,包含服务器相关的my.cnf文件驻留的目录路径。

如果未设置MYSQL_HOME,并且DATADIR中有一个my.cnf文件,BASEDIR中没有my.cnf文件,mysqld_safe将MYSQL_HOME设置为DATADIR。否则,如果未设置MYSQL_HOME并且在DATADIR中没有my.cnf,则mysqld_safe将MYSQL_HOME设置为BASEDIR。

典型情况为/usr/local/mysql/data,请注意这是配置时指定的数据目录的位置,而不是mysqld_safe启动时用–datadir指定的。运行时使用–datadir对寻找选项文件的服务器没有效果,因为服务器在处理命令行参量之前寻找这些选项。

MySQL按照上述顺序寻找选项文件,并读存在的选项文件。如果你想要使用的某个选项文件不存在,则用明文文本编辑器创建。如果存在多个选项文件,文件中指定的后读取的选项要优先文件中指定的先读取的选项。

可以从MySQL安装目录/share/mysql/下拷贝一个配置文件到mysql用户目录下,重命名为.my.cnf,我的拷贝命令:

cp share/mysql/my-medium.cnf .my.cnf

注释掉其中的skip-federated选项,如果有的话。

3. 启动和关闭

有两种启动方式:

一种是运行mysqld_safe 参数 &,例如:

mysqld_safe –defaults-file=/usr/local/mysql/my.cnf –user=mysql &

另一种是运行MySQL安装目录/share/mysql/mysql.server 参数,例如:

/home/mysql/share/mysql/mysql.server start

关闭MySQL可以kill掉进程,也可以使用/home/mysql/share/mysql/mysql.server stop 命令。

4. 命令

首先要给root设置一下密码,这个我们采用

/home/mysql//bin/mysqladmin -u root password ‘new-password’

或者

/home/mysql//bin/mysqladmin -u root -h ehost.edomain password ‘new-password’

的方式。

4.1. 创建用户

虽然创建用户有好多种方式,但是我在这里只说一种,这种记住了就可以了。

GRANT命令:

GRANT [PRIVILEGES, …] ON [database].[table] TO ‘user’@’somehost’ IDENTIFIED BY ‘password’ [WITH GRANT OPTION];

下面是几个例子:

GRANT ALL PRIVILEGES ON *.* TO ‘monty’@’localhost’ IDENTIFIED BY ‘some_pass’ WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO ‘monty’@’%’ IDENTIFIED BY ‘some_pass’ WITH GRANT OPTION;
GRANT RELOAD,PROCESS ON *.* TO ‘admin’@’localhost';
GRANT USAGE ON *.* TO ‘dummy’@’localhost';

其实,登陆进去之后,help grant就可以理解得到很详细的说明了。说到这里,郑重的跟大家说,多用help,多看文档,不要老用Google,哈哈。

5. API

C语言的API忘记了,很久没用了。

PHP的正在学习,慢慢的会加上。

发表评论

电子邮件地址不会被公开。 必填项已用*标注