MySQL数据库系统
一 MySQL简介
提供更丰富更强大的Web应用功能
参考站点:
二 MySQL服务基础
1 MySQL是开源的关系型数据库服务器软件
目前由Oracle公司开发和维护
官方站点:http://dev.mysql.com/downloads
2 MySQL的特点
多线程、多用户
基于C/S(客户端/服务器)架构
简单易用、查询速度快
安全可靠
三 MySQL的编译安装
1 准备工作
1)为了避免发生端口冲突,程序冲突,建议先检查mysql软件的安装情况,确认没有使用RPM方式安装的mysql-server、mysql软件包,否则建议将其卸载。
:rpm -q mysql-server mysql //确认没有使用RPM方式安装mysql-server、mysql
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,并添加对gbk、gb2312等其他字符集的支持
:./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 Manager、Mysql Front、Navicat 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 ‘密码’ ]
权限列表:用于列出授权使用的各种数据库操作,以逗号分隔。如select,insert,update等,使用all表示所有权限
库名.表名:指定授权操作的库和表的名称,其中可以使用通配符来表示所有库或指定库中的所有表。如newname.*
用户@来源地址:用于指定客户名称和允许访问的客户机地址,即谁能链接,能从哪里链接,来源地址可以是域名、IP、还可以使用%,表示某个区域或网段内的所有地址。如%.benet.com、192.168.1.%等
IDENTIFIED BY:若新建用户时,省略此项,则用户密码为空
执行以下命令创建对表有查询权限的名为mazi,密码为123456的用户,记录会保存到mysql库的user、db、host、tables_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 //恢复数据库