MySQL数据库系统

MySQL简介

提供更丰富更强大的Web应用功能

参考站点:

MySQL服务基础

1 MySQL是开源的关系型数据库服务器软件

目前由Oracle公司开发和维护

官方站点:http://dev.mysql.com/downloads

2 MySQL的特点

多线程、多用户

基于C/S(客户端/服务器)架构

简单易用、查询速度快

安全可靠

MySQL的编译安装

1 准备工作

1)为了避免发生端口冲突,程序冲突,建议先检查mysql软件的安装情况,确认没有使用RPM方式安装的mysql-servermysql软件包,否则建议将其卸载。

:rpm -q mysql-server mysql          //确认没有使用RPM方式安装mysql-servermysql

2)源码安装需要有开发环境

:rpm -q ncurses*                   //确认编译的开发环境工具有没有安装

:yum install ncurses*              //安装开发工具的编译环境

2 源码编译及安装

1)创建运行用户

为了加强数据库服务的权限控制,建议使用专门的运行用户,用户不需要登录系统,可以不创建宿主文件夹

:useradd -M -u 49 -s /sbin/nologin mysql

2)解包

将下载的mysql源码安装包解压,释放到/usr/src/目录下,并切换到源码目录

:mount /dev/cdrom /media                          //挂载安装包

:cd /media/

:tar zxf mysql-5.1.55.tar.gz -C /usr/src/        //解包

:cd /usr/src/mysql-5.1.55/

3)配置

企业网站平台中,可能会用到多种字符集的网页,相应的数据库系统也应该支持不同的字符集编码,在配置过程中,可以将默认使用的字符集设置为utf8,并添加对gbkgb2312等其他字符集的支持

:./configure --prefix=/usr/local/mysql --with-charset=utf8 --with-collation=utf8_general_ci --with-extra-charsets=gbk,gb2312                  //配置

上述命令中各选项含义如下

--prefix          指定将mysql数据库程序安装到哪个目录,如/usr/src/mysql

--with-charset        指定默认使用的字符集编码,应与校队规则相对应,如utf8

--with-collation             指定默认使用的字符集校队规则

--with-extra-charset              指定额外支持的其他字符集编码

4)调整字符集编码

额外的字符集编码需要进行小的调整才能被完整的支持

:vim include/config.h                   //添加字符集的支持定义

..............

#define HAVE_CHARSET_gb2312 1

#define HAVE_CHARSET_gbk 1

5)编译

:make           //编译

6)安装

:make install  //安装

3 安装后的其他调整

1)建立配置文件

mysql源码目录中的support-files文件下,提供了适合不同负责数据库的样本配置文件。如果不确定数据库系统的应用规模,一般选择my-medium.cnf文件即可。该文件能够满足大多数企业中、的中等应用需求。根据样例建立Mysql系统中的/etc/my.cnt配置文件

:cp support-files/my-medium.cnf /etc/my.cnf              //建立配置文件

2)初始化数据库

为了能够正常使用Mysql数据库系统,应以运行用户mysql的身份执行初始化任务,以便建立用户授权库、表、以及test测试库等。初始化脚本mysql_install_db位于安装目录下的bin文件夹中,此外还应该调整位于存放数据库内容的文件夹归属,以便mysql用户有权限对其进行读写操作

:cd /usr/local/mysql/bin/

: ./mysql_install_db  --user=mysql                    //初始化数据库

: chown -R root:mysql /usr/local/mysql/

: chown -R mysql /usr/local/mysql/var/

3) 优化执行路径、程序库路径

Mysql系统的各种执行程序添加符号链接,以方便其使用。另外建议为Mysql的库文件、头文件也添加符号链接,便于在安装其他用的到的这些文件的软件包时能自动搜索

:ln -s /usr/local/mysql/bin/*  /usr/local/bin/        链接很重要,否则登录时会出问题

:ln -s /usr/local/mysql/lib/mysql/*  /usr/lib/

:ln -s /usr/local/mysql/include/mysql/*  /usr/include/

4)添加为系统服务

以便通过chkconfig进行管理,将添加mysql为系统服务,这样以后可以使用service工具来控制Mysql数据库服务了

cd /usr/src/mysql-5.1.55/

cp support-files/mysql.server /etc/rc.d/init.d/mysqld          

chmod a+x /etc/rc.d/init.d/mysqld

chkconfig --add mysqld

4 访问Mysql数据库

Mysql数据库系统也是一个典型的C/S架构应用,需要访问Mysql数据库需要使用专门的客户端软件。在windows平台可以使用Mysql ManagerMysql FrontNavicat Lite等软件;而在Linux系统中,最简单、最易用的Mysql客户端软件是其自带的mysql命令工具

1)登录到mysql服务器

mysql -u 用户名 [-p]

提示符:mysql>

管理员账号为root,密码为空

: mysql -u root                             //空密码登录

: mysqladmin -u root password "123456”     //设置密码

: mysql -u root -p                          //使用密码登录

::mysql -h 192.168.1.100 -u root -p         //使用-h来指定登录其他服务器

2) 退出MySQL操作环境

:exit              

:quit

数据库的基本管理

1 Mysql操作语句

成功登陆后会进入到提示符为“mysql>”的数据库操作环境,用户可以输入各种操作语句进行管理,每一条操作语句以分号表示结束,输入时可不区分大小写

2 查看数据库服务的日志文件

SHOW MASTER LOG;

3 查看数据库结构

Mysql是一套数据库管理系统,在每一台Mysql服务器中,支持运行多个库,每个库相当于一个容器,其中存放着很多个表,表中的每一行都包含一条数据记录

1)查看数据库列表信息

默认有三个库,其中mysql库中包含了用户认证相关的表

SHOW  DATABASES;

2)查看数据库中的数据表信息

在操作前,先使用“use 数据库名”语句切换到指定库,数据库的数据文件默认存放在/usr/local/mysql/var/目录下。每一个数据库对应一个子目录,用于存储数据表文件,每一个数据表对应三个文件,后缀名分别为“.frm”、“.MYD”、“MYI

USE  mysql;

SHOW  TABLES;

3)显示数据表的结构

使用“DESCRIBE  [数据库名.]表名”的语句对指定表进行查看

DESCRIBE USER;              或者

DESCRIBE mysql.user;

4 数据库的创建和删除

1)创建新的数据库

使用“CREATE DATABASE 数据库名”语句创建新库,刚创建的数据库是空的,不包含任何表,在/usr/local/mysql/var/目录下会在动生成一个与库名相同的空文件夹

create datebase newname;

2) 创建新的数据表

CREATE TABLE 表名 (字段1名称 类型,字段2名称 类型......,PRIMARY KEY  (主键名))

user newname

create table users (user_name char(16) not null, user_passwd char(48) default ‘’, primary key (user_name));        //name库中创建名为users的用户验证表

3)删除指定的数据表

DROP TABLE [数据库名.]表名

drop table newname users;

4)删除指定的数据库

DROP DATABASE 数据库名

drop database newname;

5 管理表中的数据记录

1)插入数据记录

INSERT INTO 表名(字段1, 字段2, ……)  VALUES (字段1的值, 字段2的值, ……)

如果这条记录完整的包含所有字段值,则可以省略指定字段的部分

use newname;

insert into users (user_name,user_passwd) values  (‘zhangsan’,password  (‘123456’));

Insert into users values (‘lisi’,password (‘123456’)); //“(”前面都有空格

2)查询数据记录

SELECT 字段名1,字段名2 …… FROM 表名 WHERE 条件表达式

表示所有字段时可以使用通配符“*”,若要列出所有数据记录,则可以省略where条件句子

SELECT user_name,user_passwd FROM newname.users where user_name= 'lisi';

select user_name,user_passwd from newname.users //查看指定字段所有数据记录

select * from newname.users;              //查看所有字段所有数据记录

3)修改数据记录

UPDATE 表名 SET 字段名1=1[,字段名2=2]  WHERE 条件表达式

UPDATE newname.users SET user_passwd=PASSWORD('') WHERE user_name='lisi';

Mysql数据库服务器中,用于访问数据库的各种用户信息都保存在mysql库的user表中,可以直接修改其中的数据记录来修改用户密码

update mysql.user set password=password ('456789') where user='root'; //修改root密码

flush privileges;            //刷新用户授权信息

4)删除数据记录

DELETE FROM 表名 WHERE 条件表达式

delete from newname.users              //删除表中所有数据记录

delete from newname.users where user_name=’lisi’ //删除lisi的数据记录

Mysql数据库服务器中,默认添加了从本机访问数据库的空用户,基于安全性考虑,应该删除这些空用户

 select user,host,password from mysql.user where user='';    //查看空用户

 delete from mysql.user where user='';                       //删除空用户

维护Mysql数据库

1 数据库的用户授权

1)设置用户权限(用户不存在时,则新建用户)

GRANT 权限列表 ON 数据库名.表名 TO 用户名@来源地址 [ IDENTIFIED BY ‘密码’ ]

权限列表:用于列出授权使用的各种数据库操作,以逗号分隔。如selectinsertupdate等,使用all表示所有权限

库名.表名:指定授权操作的库和表的名称,其中可以使用通配符来表示所有库或指定库中的所有表。如newname.*

用户@来源地址:用于指定客户名称和允许访问的客户机地址,即谁能链接,能从哪里链接,来源地址可以是域名、IP、还可以使用%,表示某个区域或网段内的所有地址。如%.benet.com192.168.1.%

IDENTIFIED BY若新建用户时,省略此项,则用户密码为空

执行以下命令创建对表有查询权限的名为mazi,密码为123456的用户,记录会保存到mysql库的userdbhosttables_priv等相关表中,无需刷新

grant select on newname.* to 'mazi'@'localhost' identified by '123456';

2)查看权限

SHOW GRANTS FOR 用户名@域名或IP

Show grants for ‘mazi’@’192.168.1.100’;

3)撤销权限

REVOKE 权限列表 ON 数据库名.表名 FROM 用户名@域名或IP

revoke all on newname.* from 'mazi'@'localhost';       //取消用户所有权限,可以登录mysql服务器

2 数据库的备份与恢复

1)备份数据库

方法1:可直接备份目录 /usr/local/mysql/var/

tar -jcf mysql.tar.bz2 /usr/local/mysql/var/

方法2:使用专用备份工具 mysqldump

mysqldump -u 用户名 -p [密码] [选项] [数据库名] [表名] > /备份路径/备份文件名

A)导出指定库的部分表(备份mysql库中的user)

mysqldump -u root -p mysql user > mysql-user.sql

B)导出一个或多个完整的库(备份auth这个库)

mysqldump -u root -p --database auth > auth.sql

C)备份所有的库(--opts可以优化执行速度)

mysqldump -u root -p  --opt --all-databases > all-data.sql

D)查看备份文件内容

通过mysqldumo工具导出的sql脚本是文本文件,其中‘’或‘——’开头的是注释

 grep -v "^--" all-data.aql | grep -v "^/" | grep -v "^$

2)恢复数据库

mysql -u root -p [数据库名] < /备份路径/备份文件名

 mysql -u root -p test < mysql-user.sql        //恢复表到现有库中

 mysql -u root -p < all-data.sql               //恢复数据库