一 : Ubuntu 搭建LNMP环境图文教程 安装MySQL数据库
调出命令行界面,键入“cd /usr/local/src”回车,进入到文件夹中,这个文件夹用来保存所需使用的软件安装包。
接着键入“sudo wget http://downloads.mysql.com/archives/mysql-5.0/mysql-5.0.45.tar.gz”回车,如果提示输入密码,输入密码后回车,开始下载安装包文件,等待进度条走到头下载完毕。
下载完成后,输入“ll”可以查看到已下载的文件。
解压安装包文件,键入“sudo tar zxvf mysql-5.0.45.tar.gz”回车,开始解压操作直到完成结束。
解压结束后,进入安装目录中,键入“cd mysql-5.0.45/”回车。
键入“sudo ./configure --prefix=/usr/local/server/mysql/ --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client --with-big-tables --with-embedded-server --enable-local-infile --with-plugins=innobase”回车,开始配置安装,直到出现下图说明操作顺利完成。
我们将环境全部装在“/usr/local/server”下,所以需要先建立目录。输入“sudo mkdir /usr/local/server”回车创建目录。
将目录所属者设置成“xinxueqi.com”,执行命令“sudo chown -R xinxueqi.com:xinxueqi.com /usr/local/server”(图中为xinxueqi:xinxueqi并不是xinxueqi.com:xinxueqi.com,这里是用户名:用户组,根据实际情况设置即可)回车。
接着开始编译MySQL,在mysql-5.0.45目录下键入“sudo make && make install clean”。
编译完成后将会显示下图信息。
进入到MySQL目录中,键入“cd /usr/local/server/mysql”回车,再输入“ll”回车,查看目录下的文件列表。
创建配置文件,键入“cp ./share/mysql/my-medium.cnf ./my.cnf”回车。
然后安装默认数据库文件,键入“./bin/mysql_install_db”回车。
设置服务启动脚本,执行“sudo cp ./share/mysql/mysql.server /etc/init.d/mysql”回车。
再执行“sudo chmod +x /etc/init.d/mysql”回车。
然后使用“/etc/init.d/mysql start”及“/etc/init.d/mysql stop”运行和结束mysql服务。
最后设置数据库root密码,这步要在数据库运行的情况下执行,首先“/etc/init.d/mysql start”启动数据库,然后再执行“./bin/mysqladmin -u root password 123456”(123456是密码,根据实际情况自行设置)回车。
MySQL数据库安装到这里结束。
二 : 为mysql数据库建立索引
前些时候,一位颇高级的程序员居然问我什么叫做索引,令我感到十分的惊奇,我想这绝不会是沧海一粟,因为有成千上万的开发者(可能大部分是使用MySQL的)都没有受过有关数据库的正规培训,尽管他们都为客户做过一些开发,但却对如何为数据库建立适当的索引所知较少,因此我起了写一篇相关文章的念头。(www.61k.com)
最普通的情况,是为出现在where子句的字段建一个索引。为方便讲述,我们先建立一个如下的表。
Code代码如下: |
CREATE TABLE mytable ( id serial primary key, category_id int not null default 0, user_id int not null default 0, adddate int not null default 0 ); |
很简单吧,不过对于要说明这个问题,已经足够了。如果你在查询时常用类似以下的语句:
SELECT * FROM mytable WHERE category_id=1;
最直接的应对之道,是为category_id建立一个简单的索引:
CREATE INDEX mytable_categoryid
ON mytable (category_id);
OK,搞定?先别高兴,如果你有不止一个选择条件呢?例如:
SELECT * FROM mytable WHERE category_id=1 AND user_id=2;
你的第一反应可能是,再给user_id建立一个索引。不好,这不是一个最佳的方法。你可以建立多重的索引。
CREATE INDEX mytable_categoryid_userid ON mytable (category_id,user_id);
注意到我在命名时的习惯了吗?我使用"表名_字段1名_字段2名"的方式。你很快就会知道我为什么这样做了。
现在你已经为适当的字段建立了索引,不过,还是有点不放心吧,你可能会问,数据库会真正用到这些索引吗?测试一下就OK,对于大多数的数据库来说,这是很容易的,只要使用EXPLAIN命令:
EXPLAIN
SELECT * FROM mytable
WHERE category_id=1 AND user_id=2;
This is what Postgres 7.1 returns (exactly as I expected)
NOTICE: QUERY PLAN:
Index Scan using mytable_categoryid_userid on
mytable (cost=0.00..2.02 rows=1 width=16)
EXPLAIN
以上是postgres的数据,可以看到该数据库在查询的时候使用了一个索引(一个好开始),而且它使用的是我创建的第二个索引。看到我上面命名的好处了吧,你马上知道它使用适当的索引了。
接着,来个稍微复杂一点的,如果有个ORDER BY字句呢?不管你信不信,大多数的数据库在使用order by的时候,都将会从索引中受益。
SELECT * FROM mytable
WHERE category_id=1 AND user_id=2
ORDER BY adddate DESC;
有点迷惑了吧?很简单,就象为where字句中的字段建立一个索引一样,也为ORDER BY的字句中的字段建立一个索引:
CREATE INDEX mytable_categoryid_userid_adddate
ON mytable (category_id,user_id,adddate);
注意: "mytable_categoryid_userid_adddate" 将会被截短为
"mytable_categoryid_userid_addda"
CREATE
EXPLAIN SELECT * FROM mytable
WHERE category_id=1 AND user_id=2
ORDER BY adddate DESC;
NOTICE: QUERY PLAN:
Sort (cost=2.03..2.03 rows=1 width=16)
-> Index Scan using mytable_categoryid_userid_addda
on mytable (cost=0.00..2.02 rows=1 width=16)
EXPLAIN
看看EXPLAIN的输出,好象有点恐怖啊,数据库多做了一个我们没有要求的排序,这下知道性能如何受损了吧,看来我们对于数据库的自身运作是有点过于乐观了,那么,给数据库多一点提示吧。
为了跳过排序这一步,我们并不需要其它另外的索引,只要将查询语句稍微改一下。这里用的是postgres,我们将给该数据库一个额外的提示--在ORDER BY语句中,加入where语句中的字段。这只是一个技术上的处理,并不是必须的,因为实际上在另外两个字段上,并不会有任何的排序操作,不过如果加入,postgres将会知道哪些是它应该做的。
EXPLAIN SELECT * FROM mytable
WHERE category_id=1 AND user_id=2
ORDER BY category_id DESC,user_id DESC,adddate DESC;
NOTICE: QUERY PLAN:
Index Scan Backward using
mytable_categoryid_userid_addda on mytable
(cost=0.00..2.02 rows=1 width=16)
EXPLAIN
现在使用我们料想的索引了,而且它还挺聪明,知道可以从索引后面开始读,从而避免了任何的排序。
以上说得细了一点,不过如果你的数据库非常巨大,并且每日的页面请求达上百万算,我想你会获益良多的。不过,如果你要做更为复杂的查询呢,例如将多张表结合起来查询,特别是where限制字句中的字段是来自不止一个表格时,应该怎样处理呢?我通常都尽量避免这种做法,因为这样数据库要将各个表中的东西都结合起来,然后再排除那些不合适的行,搞不好开销会很大。
如果不能避免,你应该查看每张要结合起来的表,并且使用以上的策略来建立索引,然后再用EXPLAIN命令验证一下是否使用了你料想中的索引。如果是的话,就OK。不是的话,你可能要建立临时的表来将他们结合在一起,并且使用适当的索引。
要注意的是,建立太多的索引将会影响更新和插入的速度,因为它需要同样更新每个索引文件。对于一个经常需要更新和插入的表格,就没有必要为一个很少使用的where字句单独建立索引了,对于比较小的表,排序的开销不会很大,也没有必要建立另外的索引。
以上介绍的只是一些十分基本的东西,其实里面的学问也不少,单凭EXPLAIN我们是不能判定该方法是否就是最优化的,每个数据库都有自己的一些优化器,虽然可能还不太完善,但是它们都会在查询时对比过哪种方式较快,在某些情况下,建立索引的话也未必会快,例如索引放在一个不连续的存储空间时,这会增加读磁盘的负担,因此,哪个是最优,应该通过实际的使用环境来检验。
在刚开始的时候,如果表不大,没有必要作索引,我的意见是在需要的时候才作索引,也可用一些命令来优化表,例如MySQL可用"OPTIMIZE TABLE"。
综上所述,在如何为数据库建立恰当的索引方面,你应该有一些基本的概念了。
三 : 怎么使用MySql-Front新建数据库
[mysql front]怎么使用MySql-Front新建数据库——简介四 : MYSQL创建utf-8格式的数据库
MYSQL创建utf-8格式的数据库
先mysql进入:
www.2cto.com
Linux代码
GBK: create database test2 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
UTF8: CREATE DATABASE `test2` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
eg:
Linux代码 www.2cto.com
[root@linuxtest test]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.1.30-community MySQL Community Server (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> CREATE DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected (0.06 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| cacti |
| mysql |
| test | |
+--------------------+
5 rows in set (0.07 sec)
这个test库就是utf-8格式的
扩展:mysql创建utf8数据库 / mysql 创建数据库 utf / mysql 建数据库 utf8
五 : mysql如何建立数据库
mysql建立数据库使用create命令:
新建数据库例:
以mysql最高管理员登录,在mysql>create database XXXXX;
xxxxx即为数据库名.
在mysql中如何创建用户,使该用户对该数据库有完全权限.
可 以 用 GRANT 命 令 , 格 式 如 下 :
GRANT 许可权 ON 数据库名.表名 TO 新用戶名@主机名 IDENTIFIED BY '密码';
grant all on husidb.* to john@localhost identified by ’201314’;
注:每一句mysql语句后面都跟有;号.注意大小写.
61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1