欢迎光临
我们一直在努力

MySQL数据库服务器的配置-网管专栏,数据库服务

建站超值云服务器,限时71元/月

    随着互联网的发展和自由软件软件的日益活跃,越来越多的人开始将各种数据库应用于自己的网络应用中。于是,各种各样的数据库系统出现在互联网的舞台上,最常见的数据库有oreilly network的mysql 和postgresql inc的 postgresql,在互联网有着不同的应用和用户群。此外象oracle、sybase、infomix等大型数据库也开始渐渐向linux平台移植,使得linux下的数据库日益呈现多样化和专业化的趋势。

 

1.为什么要使用数据库

为了建立交互站点,你需要使用数据库来存储来自访问者的信息。例如,你要建立一个 职业介绍服务的站点,你就需要存储诸如个人简历,所感兴趣的工作等等这样的信息。 创建动态网页也需要使用数据库,如果你想显示符合来访者要求的最好的工作,你就需要从数据库中取出这份工作的信息。你将会发现,在许多情况下需要使用数据库。

2.如何取得数据库软件

现下流行的linux数据库基本都可以通过internet下载的到,你可以从以下几个地方下载mysql数据库:
mysql:到本书出版为止,mysql的最新版本号是3.23.22
http://www.mysql.com

3. mysql的安装和使用:

3.1.安装前的准备工作:

mysql需要至少linux 2.0。
mysql的perl支持要求perl 5.004_03或更新。
mysql在linux下的安装有两种:1) 源码方式的安装,取得mysql的安装tar包后自行编译安装;2〕二进制方式的安装,用mysql编译好的二进制文件安装,主要是以rpm的形式进行安装。
二进制分发通过在你选择的安装地点(典型的”/usr/local/mysql”)解压缩来安装,并且在该处创建下列目录(表.1):

表.1

目录 目录的内容
“bin” 客户程序和mysqld服务器
“data” 日志文件, 数据库
“include” 包含(头)文件
“lib” 库文件
“scripts” mysql_install_db
“share/mysql ” 错误消息文件
“sql-bench” 基准程序

源代码分发在你配置并编译后进行安装。缺省地,安装步骤将文件安装在”/usr/local”下的下<span onmouseup=”dfwyexplainerobj.window = self; dfwyexplainerobj.showexplainer(normal);return false;” title=”常规词语,单击这里可以查看解释” style=”background-image: url(c:progra~1!sunvdfkc3000
ormmark.gif); background-position: left bottom; background-repeat: repeat-x; cursor: hand” )>列子</span>目录(表.2):

表.2

目录 目录的内容
“bin” 客户程序和脚本
“include/mysql” 包含(头)文件
“info” info格式的文档
“lib/mysql” 库文件
“libexec” mysqld服务器
“share/mysql” 错误消息文件
“sql-bench” 基准程序和crash-me测试
“var” 数据库和日志文件。

在一个安装目录内,源代码安装的布局在下列方面不同于二进制安装:

* mysqld服务器被安装在”libexec”目录而不是”bin”目录内。
* 数据目录是”var”而非”data”。
* mysql_install_db被安装在”/usr/local/bin”目录而非”/usr/local/mysql/scripts”内。
* 头文件和库目录是”include/mysql”和”lib/mysql”而非”include”和”lib”。

3.2.用mysql的源码包进行安装

你需要下列工具构造并安装mysql源代码:

* gnu gunzip解压缩该分发。
* 一个合适的tar解包分发。gnu tar已知可以工作。
* 一个能运行的ansi c++编译器。gcc> = 2.8.1 、egcs> = 1.0.2 、sgi c++和sunpro c++是一些已知能工作编译器。 当使gcc用时,不需要libg++。gcc2.7.x 有一个bug,使得它可能不能编译一些完全合法的c++文件,例如”sql/sql_base.cc”。如果你仅有gcc2.7.x,你必须升级gcc才能编译mysql。
* 一个优秀的make程序。gnu make总是被推荐且有时必须。如果你有问题,我们推荐试一试gnu make3.75或更新。
* 你要拥有系统的root权限。

3.2.1.快速安装:

其实mysql源码是个非常适合linux初学者安装的数据库,他的快速安装极为简便,在默认情况下mysql是安装在/usr/local/下的,包括他的bin文件以及数据结构等。

# tar zxvf tarfile.tar.gz
# cd mysql_src_dir
#./configure
#make
#make install
#make clean

这样的快速安装方法就把mysql安装成系统的默认状态

3.2.2.配置安装:

用上述的方法对源码解包后,就可以根据自己的需要利用configure对mysql进行安装配置了

1.configure选项:

configure脚本给你一个很大的控制权来如何配置你的mysql。你使用configure命令行的选项进行。你也可以用正确的环境变量作用于configure。对于一个由configure支持的选择列表,运行这个命令:
#./configure — help

一些更常用的configure选项见下面的描述:

* 只编译mysql客户库和客户程序而不是服务器,使用–without-server选项:

# ./configure –without-server

如果你没有一个 c++ 编译器,mysql将不编译(有一个客户程序需要c++)。在这种情况下,你可以去掉configure里面测试c++编译器的代码,然后运行带有 –without-server选项的./configure。编译步骤步将仍然尝试构造mysql,但是你可以忽略任何关于” mysql.cc “的警告。(如果make停止,试试make -k告诉它即使出错继续剩下的构造步骤)。

* 如果你不想要位于”/usr/local/var”目录下面的日志(log)文件和数据库,使用类似于下列configure命令的一个:

* #./configure –prefix=/usr/local/mysql
* #./configure –prefix=/usr/local –localstatedir=/usr/local/mysql/data

第一个命令改变安装前缀以便任何东西被安装在”/usr/local/mysql”下面而非缺省的“/usr/local”。第二个命令保留缺省安装前缀,但是覆盖了数据库目录缺省目录(通常是”/usr/local/var”)并且把它改/usr/local/mysql/data.

* 如果你正在使用linux并且你想要mysql的套接字位于缺省地点以外的某个地方(通常在目录”/tmp”或”/var/run”,使用象这样的configure的命令:

#./configure –with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock

注意给出的文件必须是一个绝对路径!

* 如果你想编译静态链接程序运行configure:

* #./configure –with-client-ldflags=-all-static –with-mysqld-ldflags=-all-static

* 如果你正在使用gcc并且没有安装libg++或libstdc++,你可以告诉configure使用gcc作为c++编译器:

#cc=gcc cxx=gcc ./configure
当你使用时gcc作为c++编译器是,它将不试图链接libg++或libstdc++。如果构造失败并且产生有关编译器或链接器的错误,不能创建共享库”libmysqlclient.so.#”(“#”是一个版本号), 你可以通过为configure指定–disable-shared选项来解决此问题。在这种情况下,configure将不构造一个共享libmysqlclient.so.#库。

* 你可以设置mysql对于非null的列不使用default列值(即,不允许列是null)。这导致insert语句产生一个错误,除非你明确地为所有要求非null值的列指定值。为了禁止使用缺省值,这样运行configure:
# cxxflags=-ddont_use_default_fields ./configure

* 缺省地,mysql使用iso-8859-1(latin1)字符集。为了改变缺省设置,使用–with-charset选项目:

#./configure — with-charset= gb2312
charset可以是big5、cp1251、cp1257、czech、danish、dec8、dos、euc_kr、gb2312 gbk、german1、hebrew、 hp8、hungarian、koi8_ru、koi8_ukr、latin1、latin2、sjis、swe7、tis620、ujis、usa7、win1251或win1251ukr之一。注意:如果你想要改变字符集,你必须在配置期间做make distclean!如果你想在服务器和客户之间变换字符,你应该看一下set option character set命令。如果你在创建了任何数据库表之后改变字符集,你将必须对每个表运行myisamchk -r -q,否则你的索引可能不正确地排序。(如果你安装了mysql,创建一些表,然后重新配置mysql使用一个不同的字符集并且重新安装它,这时就可能发生这种情况。)

* 为了配置mysql带有调试代码,使用–with-debug选项:

#./configure –with-debug
这导致包含一个安全的内存分配器,能发现一些错误和并提供关于正在发生的事情的输出。

2.编译mysql:

配置完mysql就可以进行编译了

#make

3.安装mysql:

#make install

这步系统会把mysql安装到指定的位置,我们假设系统把mysql安装到了/usr/local/下,到这就完成了mysql系统的源码方式配置、编译和安装了。

3.3.用rpm包进行安装

除了使用mysql的源码安装外,mysql还提供了rpm方式的二进制安装法:

你可能要使用的rpm文件有:

* mysql-version.i386.rpm mysql服务器。除非你只是想要与运行在其他机器上mysql服务器连接,否则你将需要它。

* mysql-client-version.i386.rpm 标准mysql客户程序。你可能总是需要安装这个包。

* mysql-bench-version.i386.rpm 测试和基准程序。需要perl和msql-mysql-modules rpm。

* mysql-devel-version.i386.rpm 所需的库和包含文件。如果你想要编译其他mysql客户程序, 例如perl模块。

* mysql-version.src.rpm 包含上述所有包的源代码。它也能被用来尝试为其他硬件平台构造rpm。
查看一个rpm包中的所有文件:

# rpm -qipl mysql-version.i386.rpm
实施一个标准的最小安装,运行这个命令:

# rpm -i mysql-version.i386.rpm mysql-client-version.i386.rpm

只安装客户包:

# rpm -i mysql-client-version.i386.rpm

rpm将数据放在”/var/lib/mysql”里,rpm也在”/etc/rc.d/”里创建适当的入口以便在引导时自动启动服务器。(这意味着如果你以前已经安装过,在对它改变之前,你可以把你以前安装的mysql启动文件做个拷贝,因此你不会丢失改动的配置)。

在安装了rpm文件后,”mysqld”守护程序应该正在运行,并且现在你应该可以开始使用mysql。

3.4.调试mysql

安装mysql授权表:

如果你是第一次安装mysql,你需要先创造mysql授权表

#/usr/local/bin/mysql_install_db

启动mysql进程:

#/usr/local/bin/safe_mysqld &

调试你的mysql服务器:

使用mysqladmin查看服务器是否正在运行。下列命令提供简单的测试来检查服务器启动和连接的应答:

#/usr/local/bin/mysqladmin version
#/usr/local/bin/mysqladmin variables

从mysqladmin version的输出根据你的平台和mysql版本略有不同,但是应该类似如下显示:

#/usr/local/bin/mysqladmin version
mysqladmin ver 8.0 distrib 3.22.32, for pc-linux-gnu on i686
tcx datakonsult ab, by monty
server version 3.22.32
protocol version 10
connection localhost via unix socket
unix socket /tmp/mysql.sock
uptime: 5 days 17 hours 38 min 37 sec
threads: 2 questions: 3276 slow queries: 0 opens: 19 flush tables: 1 open tables: 15

mysqladmin的其它使用方法,可以用–help选项来看他的帮助。

使用mysql客户端程序:

#/usr/local/bin/mysql -u[user]-p[password]

-u的参数指定mysql的数据库用户,-p用于指定密码,例如用户名是wing,密码是12345:

#/usr/local/bin/mysql -uwing-p12345

注意u和wing之间以及p和12345之间都没有任何的空格,如果用户名和密码均正确系统者会显示一下信息:
welcome to the mysql monitor. commands end with ; or g.
your mysql connection id is 826 to server version: 3.22.32

type help for help.

mysql>

说明你以及进入mysql的客户端,你可以使用基本的sql语句对mysql数据库进行操作和管理。(sql语言的使用请详见本章的附录)

3.5.mysql数据库的用户管理和存取权限

mysql有一个先进但非标准的安全/权限系统。它使用一个独立的数据库对存取权限进行严格的设置和管理,这也可以说是mysql数据库的一大特性;

mysql权限系统的主要功能是证实连接到一台给定主机的一个用户,并且赋予该用户在一个数据库上select、 insert、update和delete的权限。附加的功能包括有一个匿名的用户和对于mysql特定的功能例如load data infile进行授权及管理操作的能力。

权限信息用user、db、host、tables_priv和columns_priv表被存储在mysql数据库中(即在名为mysql的数据库中)。

本书所用的涉及由mysql提供的权限名称显示在下表,还有在授权表中每个权限的表列名称和每个权限有关的上下文(表3):
表3
权限 列 功能
select select_priv 表
insert insert_priv 表
update update_priv 表
delete delete_priv 表
index index_priv 表
alter alter_priv 表
create create_priv 数据库、表或索引
drop drop_priv 数据库或表
grant grant_priv 数据库或表
references references_priv 数据库或表
reload reload_priv 服务器管理
shutdown shutdown_priv 服务器管理
process process_priv 服务器管理
file file_priv 在服务器上的文件存取

select、insert、update和delete权限允许你在一个数据库现有的表上实施操作。

select语句只有在他们真正从一个表中检索行是才需要select权限,你可以执行某个select语句,甚至没有任何到服务器上的数据库里的存取任何东西的许可。例如,你可使用mysql客户作为一个简单的计算器:

mysql> select 1+1;
mysql> select pi()*2;

index权限允许你创建或抛弃(删除)索引。

alter权限允许你使用alter table。

create和drop权限允许你创建新的数据库和表,或抛弃(删除)现存的数据库和表。
注意:如果你将mysql数据库的drop权限授予一个用户,该用户能抛弃存储了mysql存取权限的数据库!
grant权限允许你把你自己拥有的那些权限授给其他的用户。

file权限给予你用load data infile和select … into outfile语句读和写服务器上的文件,任何被授予这个权限的用户都能读或写mysql服务器能读或写的任何文件。

其余的权限用于管理性操作,它使用mysqladmin程序实施。

reload命令告诉服务器再读入授权表,refresh命令清洗所有表并打开和关闭记录文件,flush-privileges是reload的一个同义词,其它flush-*命令执行类似refresh的功能,但是范围更有限,并且在某些情况下可能更好用。例如,如果你只是想清洗记录文件,flush-logs比refresh是更好的选择。

shutdown命令关掉服务器。

processlist命令显示在服务器内执行的线程的信息。kill命令杀死服务器线程。你总是能显示或杀死你自己的线程,但是你需要process权限来显示或杀死其他用户启动的线程。

总的说来,只授予权限给需要他们的那些用户是一个好主意,但是你应该在授予某个权限时试验特定的警告:

* grant权限允许用户放弃他们的权限给其他用户。2个有不同的权限并有grant权限的用户可以合并权限。

* alter权限可以用于通过重新命名表来推翻权限系统。

* file权限可以被滥用在服务器上读取任何世界可读(world-readable,即任何人可读)的文件到一张数据库表,然后其内容能用select被存取。

* shutdown权限通过终止服务器可以被滥用完全拒绝为其他用户服务, 。

* precess权限能被用来察看当前执行的查询的普通文本,包括设定或改变口令查询。

* 在mysql数据库上的权限能被用来改变口令和其他存取权限信息。(口令被加密存储,所以一个恶意的用户不能简单地读取他们。然而,有足够的权限,同一个用户能用不同的一个代替一个口令。)

有一些事情你不能用mysql权限系统做到:

* 你不能明显地指定一个给定用户应该被拒绝存取。即,你不能明显地匹配一个用户并且然后拒绝连接。

* 你不能指定一个用户有权创建立或抛弃一个数据库中的表,也不能创建或抛弃数据库本身。

3.6.mysql数据库的备份

备份mysql数据库的方法是使用mysqldump程序:

1. 为你的数据库做一个完整的备份:

2. shell> mysqldump –tab=/path/to/some/dir –opt –full
你也可以简单地拷贝所有的表文件(“*.frm”、“*.myd”和”*.myi”文件),只要服务器不在更新任何东西。

3. 停止mysqld如果它正在运行,然后以–log-update选项启动它。你将得到一个名为“hostname.n”形式的日志文件, 这里n是随着你每次执行mysqladmin refresh或mysqladmin flush-logs、flush logs语句、或重启服务器而递增的一个数字。这些日志文件向你提供了在你执行mysqldump处后面进行的复制数据库改变的所需信息。

如果你必须恢复一些东西,尝试首先用myisamchk -r恢复你的表。这应该处理所有情况的99.9%。如果myisamchk失败,尝试下列过程:

1. 恢复原来的mysqldump备份。

2. 执行下列命令以再次运行更新日志中的更改:

3. shell> ls -1 -t -r hostname.[0-9]* | xargs cat | mysql

ls被用来以正确的顺序得到所有的日志文件。

你也可以与select * into outfile file_name from tbl_name做有选择的备份并且用load data infile file_name replace …恢复。为了避免重复记录,在表中你需要一个primary key或unique键。当在唯一键值上一个新记录与一个老记录重复时,replace关键词使得老记录用一个新记录替代。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » MySQL数据库服务器的配置-网管专栏,数据库服务
分享到: 更多 (0)