搜档网
当前位置:搜档网 › mysql在Linux系统上的安装与配置

mysql在Linux系统上的安装与配置

1.1 MySQL简介
MySQL服务概述
MySQL是当前开源数据库中最受欢迎SQL数据库管理系统,它由MySQL AB开发、发布和支持。MySQL AB是一家基于MySQL开发人员的商业公司,它是一家使用了一种成功的商业模式来结合开源价值和方法论的第二代开源公司。MySQL是MySQL AB的注册商标。
MySQL是一个快速的、多线程、多用户和健壮的SQL数据库服务器。MySQL服务器支持关键任务、重负载生产系统的使用,也可以将它嵌入到一个大配置(mass-deployed)的软件中去。
许可费用方面,MySQL的普及很大程度上源于它的宽松,除了略显不寻常的许可费用。MySQL的价格随平台和安装方式变化。MySQL的Windows版本(NT和9X)在任何情况下都不免费,而任何Unix变种(包括Linux)的MySQL如果由用户自己或系统管理员而不是第三方安装则是免费的,第三方安装则必须付许可费。

1.2 MySQL服务安装与配置
这里将以MySQL源码包在RedHat AS4上安装配置来进行讲解,在其他操作系统上的源码包安装都与此类似。
1.2.1 获取MySQL
目前MySQL的最新稳定发行版本是5.0.33,可以在其官方下载地址 https://www.sodocs.net/doc/255565008.html,/downloads/mysql/5.0.html下载到。
注意:要找到页面最下方的源码包(Source downloads)Tarball (tar.gz)
在这个页面我们还可以看到许多其他为特定操作系统版本编译好的MySQL安装包,可以针对特定操作系统无需安装直接运行。

1.2.2 安装准备工作
首先要检查操作系统是否安装了所需要的软件包,因为这里安装的的是源码包因此要确认是否操作系统是否安装了C语言编译环境(gcc, libgcc等)
在命令行下以root身份查看是否正确安装gcc
[root@as4 /]# rpm -aq|grep gcc
gcc-objc-3.4.3-9.EL4
compat-libgcc-296-2.96-132.7.2
compat-gcc-32-c++-3.2.3-47.3
libgcc-3.4.3-9.EL4
gcc-3.4.3-9.EL4

此外,还要防止操作系统原有的MySQL包对新安装的MySQL造成影响,因此不要让系统自带的MySQL影响到新安装的MySQL,首先要卸载系统自带的MySQL(注意:一般来说RedHat的发行版中带的MySQL都不是最新版本)。我们可以通过以下步骤卸载系统自带的MySQL。
1)[root@as4 /]# rpm -aq|grep mysql
mysql-4.1.12-3.RHEL4.1
mysqlclient10-3.23.58-4.RHEL4.1…
2) [root@as4 ]# rpm -e mysql-4.1.12-3.RHEL4.1…

1.2.3 开始安装
把获得的MySQL源码包mysql-5.0.33.tar.gz复制到/opt目录下开始解压
[root@as4 /]# cd /opt/
[root@as4 opt]# tar zxvf ./mysql-5.0.33.tar.gz
为MySQL创建独立用户,一般来说这种独立运行的数据库都要创建一个独立的系统用户,有些数据库是必须要独立系统用户的。
[root@as4 /]# useradd mysql -d /opt/mysql-5.0. 33
[root@as4 /]# chown -R mysql.mysql /opt/mysql-5.0. 33
创建2个重要目录(数据和连接)
数据目录用于存放MySQL

的所有数据,而连接目录是存放MySQL运行时的socket文件
[root@as4 /]# su – mysql 先切换到mysql用户
[mysql@as4 ~]$ mkdir ./data
[mysql@as4 ~]$ mkdir ./tmp

开始预编译
[mysql@as4 ~]$ ./configure --prefix=/opt/mysql-5.0.33 --localstatedir=/opt/mysql-5.0.33/data --with-unix-socket-path=/opt/mysql-5.0.33/tmp/mysql.sock --with-mysqld-user=mysql --enable-large-files --with-big-tables --with-charset=utf8 --with-extra-charsets=latin1,latin2,latin5,latin7,gb2312,gbk
--prefix参数是指定mysql的安装目录
--localstatedir是指定mysql数据的存放目录
--with-unix-socket-path是指定socket文件的存放路径
--with-mysqld-user是指定使用用户
可以用configure –help查看可以使用的所有参数

开始编译
[mysql@as4 ~]$ make
此过程相对来说会比较长,当然也跟机器的硬件配置有关

开始安装
[mysql@as4 ~]$ make install
此步骤完成后MySQL软件就安装到系统了,安装过程与Windows下的安装有些不同,由于是源码包安装,因此很多参数都是要手工设置的

安装完的重要设置
进行初始化数据操作
[mysql@as4~]$ ./scripts/mysql_install_db --datadir=/opt/mysql-5.0.33/data

此步骤创建2个系统初始数据库:mysql和test

1.3 管理MySQL
在运行数据库系统时, MySQL的使用相当简单,且进行MySQL安装和使用所需的工作也很少。MySQL的简单性可能就是它极为普及的原因,尤其是在非程序员人群中的普及。当然,它对于训练有素的计算机专业人员也是有帮助的,但肯定不是对运行一个成功的MySQL安装程序的需求。
如果有管理其他数据库系统的经验,将会发现:运行MySQL的安装程序在某些方面是类似的,您的经验也是用得着的。但是MySQL的管理有自己独特的需求,本书的这个部分将帮助您熟悉这些内容。

管理职责概述

MySQL数据库系统由几部分组成。您应该熟悉这些组成部分的内容和每个部分的目的。这需要您了解所管理系统的特征以及帮助您进行管理的可用工具。如果您花时间去了解了要监督的内容,工作将会变得非常容易。为此,您应当使自己熟悉MySQL的以下几个方面:
MySQL服务器。服务器mysql执行数据库和表的所有操作。safe_mysqld 是一个相关的程序,它用于启动服务器、监控服务器和重新启动服务器。
MySQL客户机和实用程序。有几个MySQL程序,可用来帮助您与服务器进行通信和执行管理的任务。其中最重要的几个是:
mysql,一个交互式程序,允许将SQL 语句发布到服务器上并浏览其结果。
mysqladmin,一个管理程序,允许执行诸如关闭服务器以及创建或删除数据库的工作。如果服务器运行不正常,还可以用mysqladmin 来检查服务器的状态。
isamchk 和my i s a m c h k,这些实用程序

帮助您完成表的分析和优化,以及在表损坏时进行崩溃恢复。
mysqldump,一个工具,用于备份数据库或将数据库拷贝到另一个服务器中。
服务器的语言,SQL。有些管理职责只能用mysqladmin 的命令行实用程序来完成,但是,如果还能用服务器自己的语言来同服务器进行对话,那就更好了。没有任何替代品能够参与并与服务器直接通信。可通过使用mysql客户机程序发布能够检验授权表的SQL 查询来做到这一点。如果MySQL版本还未引入GRANT 语句,则需要使用mysql首先设置每个用户的权限。
如果不知道SQL 的任何内容,至少必须对SQL要有基本的了解。缺乏对SQL 的熟悉只会带来困惑,而在学习SQL 上所花费的时间将会得到成倍的回报。真正掌握SQL 要花费一些时间,但掌握基本技能则很快。
MySQL数据目录。数据目录是服务器存储其数据库和状态文件的所在。了解数据目录的结构及内容是很重要的,您可以知道服务器是怎样使用文件系统来表现数据库和表的,以及像日志这样的文件的存放位置和其内容。还应该了解在文件系统中管理磁盘空间分配的选项,当发现放置数据目录的文件系统过满时可以进行调整。

常规管理

常规管理主要指处理mysqld、MySQL服务器和提供给用户的访问服务器的操作。在履行该职责时,下列的任务是最重要的:
服务器的启动和关闭。应该能够从命令行中手工启动和终止服务器,并且在系统启动和关闭时知道怎样进行自动启动和关闭。如果服务器崩溃了或启动不正常的话,了解怎样使服务器再次运行也是重要的。
用户账号维护。应该了解MySQL用户和UNIX 或Windows 用户之间的区别。应该知道怎样通过指定哪些用户可以连接到服务器和从哪里进行连接来建立MySQL用户账号。还应该给新的用户建议合适的连接参数,以使他们成功地连接到服务器。弄清应怎样建立账号不是用户们的工作。
日志文件维护。应该了解可以维护的日志文件的类型,以及在何时和怎样完成日志文件的维护。日志的循环和终止对于防止日志填满文件系统是必要的。
数据库备份和拷贝。数据库备份对服务器系统的崩溃是至关重要的。应该能够将数据库恢复到崩溃时的状态,以便尽可能地减少数据的丢失。请注意,数据库备份与常规的系统备份不同,例如,可通过使用UNIX 的dump 程序来进行。与数据库表相对应的文件在系统备份发生时随服务器活动而变化,因此恢复那些文件将使您的表内部不一致。mysqldump 程序将产生对恢复数据库更有用的备份文件,并允许在不关闭服务器的状态下创建备份。
如果决定在更快的主机上运行数据库,或者想复制数据库

,则需要拷贝其内容到另一台机器上。如果需要的话,应该了解进行这项操作的过程。数据库文件是依赖于系统的,因此您不能只拷贝这些文件。
服务器优化。用户想要服务器以最佳状态运行。提高服务器运行性能的最简单方法是购买更多的内存或使磁盘速度更快。但是,这种直截了当的技术并不能代替对服务器工作的了解。应该了解优化服务器操作所用的参数以及如何将这些参数应用在您的环境中。在某些站点中,大多数查询都是检索。而在另一些站点,插入和更新操作占据着优势。选择对哪些参数进行修改将受到站点查询的影响。
多服务器。在某些环境中运行多服务器是有用的。如果保留当前的成品安装程序在适当的位置,或者为不同的用户组提供较好的保密性(后者与ISP 尤其相关),则可以测试新的MySQL版本。对于这些情形,您应该了解怎样建立多个同时发生的安装。
MySQL更新。由于新的MySQL版本频繁出现,应该知道怎样始终跟上这些版本以便利用故障修复和新的特性。需要了解不进行版本升级的理由,并且掌握怎样在稳定版本和开发者版本之间进行选择。
1.3.1 启动MySQL
[mysql@as4 /]$ ./bin/mysqld_safe --no-defaults &
1) --no-defaults 参数是不使用默认值,默认设置的数据库文件是存放在/var目录下
2)&是后台运行


1.3.2 停止MySQL
[mysql@as4 ~]$ mysqladmin shutdown -u root –p
-u 是指定用户
-p 是指定密码

在本机命令行下进入MySQL
mysql@as4 ~]$ mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2 to server version: 5.0.33
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
1.3.3 MySQL用户管理
MySQL安装好后默认的管理员帐号也是root(与OS的帐号名一样),而密码是空,但是只能从本机访问,该默认帐号可以被删除和修改。

一、新增MySQL用户
格式:grant select on 数据库.* to 用户名@登录主机 identified by "密码"
例1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MYSQL,然后键入以下命令:
grant select,insert,update,delete on *.* to test1@"%" Identified by "abc";
但例1增加的用户是十分危险的,如果某人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录这台mysql数据库并对数据可以为所欲为了,解决办法见例1。
例1、增加一个用户test2密码为abc,使其只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本地主机,即MYSQL数据库所在的那台主机),这样用户即使用知道test2的密码,也无法从intern

et上直接访问数据库,只能通过MySQL主机上的web页来访问了。
grant select,insert,update,delete on mydb.* to test2@localhost identified by "abc";
如果你不想test2有密码,可以再打一个命令将密码消掉。
grant select,insert,update,delete on mydb.* to test2@localhost identified by "";
二、修改MySQL用户的方法,这里讲两种方法
1) 以root登陆后直接用SQL语句修改系统库mysql中的user表
[mysql@as4 mysql]$ mysql -u root –p(在命令行下用root身份进入MySQL)
mysql> use mysql; (选择系统数据库)
mysql> update user set password=password('654321') where user='root' (将root用户的密码改成654321,注意要加函数password(),因为mysql中密码是采用MD5算法进行加密的,如果不用该函数密码将以明文存储,这样在登陆的时候系统把654321用MD5算法一计算后就跟表user中存出的654321密码不一致了,这样你就登陆不了了)
mysql> flush privileges; (提交你的修改请求)

2) 直接在bash shell命令行下用mysqladmin这个命令修改
[mysql@as4 mysql]$ mysqladmin -u root -p654321 password 123456
(将来root用户的密码从654321修改为123456)


添加一个远程管理MySQL的用户
[mysql@as4 ~]$ mysql
mysql> grant all privileges on *.* to mysql@'192.168.0.0/255.255.0.0' identified by 'mysql';
mysql> \q
以上命令可以添加一个可以从192.168.0.0/16IP段访问MySQL服务器上所有数据库的用户,其中帐号是mysql,口令是mysql

三、常用命令行操作
1 显示命令
1)显示数据库列表。
show databases;
刚开始时才两个数据库:mysql和test。mysql库很重要它里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进行操作。
2)显示库中的数据表:
use mysql; //打开库,学过FOXBASE的一定不会陌生吧
show tables;
3)显示数据表的结构:
describe 表名;
4)显示表中的记录:
select * from 表名;
2 创建/删除命令
1) 建库:
create database 库名;
2) 建表:
use 库名;
create table 表名 (字段设定列表);
3) 删库和删表:
drop database 库名;
drop table 表名;
4) 将表中记录清空:
delete from 表名;

3 一个建库和建表以及插入数据的实例
drop database if exists book; //如果存在book库则删除
create database book; //建立库book
use book; //打开库book
create table storybook //建立表storybook
(
id int(3) auto_increment not null primary key,
name char(10) not null,
author varchar(50) default '张三',
public_date date
); //建表结束
//以下为插入字段
insert into storybook values('','MySQL数据库优化','李四','2006-12-15');
insert into storybook values('','精通PostgreSQL数据库','王五','2006-09-11');

注:在建表中
(1)将i

d设为长度为3的数字字段:int(3)并让它每个记录自动加一:auto_increment并不能为空:not null而且让他成为主字段primary key
(2)将name设为长度为10的字符字段
(3)将author设为长度50的字符字段,而且缺省值为张三。varchar和char有什么区别呢,简单说,varchar是不固定长度的字符串,char是固定长度的字符串。
(4)将public_date设为日期字段。
如果在mysql提示符键入上面的命令也可以,但不方便调试。可以将以上命令原样写入一个文本文件中假设为book.sql,然后复制到/tmp下,并在命令行状态进入目录mysql/bin,然后键入以下命令:
mysql –u root -p密码 < /tmp/book.sql
如果成功,空出一行无任何显示;如有错误,会有提示。

4 将文本数据转到数据库中
1) 文本数据应符合的格式:字段数据之间用tab键隔开,null值用n来代替.
例:
5 Linux基础教程 王五 2006-12-21
6 Linux中级教材 张三 2006-12-11
2) 数据传入命令
use book;
SELECT * FROM storybook INTO OUTFILE '/tmp/myfile_name';
恢复的方法:
USE book;
LOAD DATA INFILE '/tmp/myfile_name ' INTO TABLE book;
注:该导出/导入方法仅仅是操作表中的数据,并且导出表的导入表的字段个数和类型必须完全一样。

四、导出/导入数据
除了用mysqldump来导出MySQL数据,还可以用 SQL 语法进行备份:BACKUP TABLE 或者 SELECT INTO OUTFILE,又或者备份二进制日志(binlog),还可以是直接拷贝数据文件和相关的配置文件。MyISAM 表是保存成文件的形式,因此相对比较容易备份,上面提到的几种方法都可以使用。Innodb 所有的表都保存在同一个数据文件 ibdata1 中(也可能是多个文件,或者是独立的表空间文件),相对来说比较不好备份,开源的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump。
1) 导出
mysqldump 是采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法。
现在来讲一下 mysqldump 的一些主要参数:
--compatible=name
它告诉 mysqldump,导出的数据将和哪种数据库或哪个旧版本的 MySQL 服务器相兼容。值可以为 ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options 等,要使用几个值,用逗号将它们隔开。当然了,它并不保证能完全兼容,而是尽量兼容。

--complete-insert,-c
导出的数据采用包含字段名的完整 INSERT 方式,也就是把所有的值都写在一行。这么做能提高插入效率,但是可能会受到 max_allowed_packet 参数的影响而导致插入失败。因此,需要谨慎使用该参数,至少我不推荐。

-

-default-character-set=charset
指定导出数据时采用何种字符集,如果数据表不是采用默认的 latin1 字符集的话,那么导出时必须指定该选项,否则再次导入数据后将产生乱码问题。

--disable-keys
告诉 mysqldump 在 INSERT 语句的开头和结尾增加 /*!40000 ALTER TABLE table DISABLE KEYS */; 和 /*!40000 ALTER TABLE table ENABLE KEYS */; 语句,这能大大提高插入语句的速度,因为它是在插入完所有数据后才重建索引的。该选项只适合 MyISAM 表。

--extended-insert = true|false
默认情况下,mysqldump 开启 --complete-insert 模式,因此不想用它的的话,就使用本选项,设定它的值为 false 即可。

--hex-blob
使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用本选项。影响到的字段类型有 BINARY、VARBINARY、BLOB。

--lock-all-tables,-x
在开始导出之前,提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭 --single-transaction 和 --lock-tables 选项。

--lock-tables
它和 --lock-all-tables 类似,不过是锁定当前导出的数据表,而不是一下子锁定全部库下的表。本选项只适用于 MyISAM 表,如果是 Innodb 表可以用 --single-transaction 选项。

--no-create-info,-t
只导出数据,而不添加 CREATE TABLE 语句。

--no-data,-d
不导出任何数据,只导出数据库表结构。

--opt
这只是一个快捷选项,等同于同时添加 --add-drop-tables --add-locking --create-option --disable-keys --extended-insert --lock-tables --quick --set-charset 选项。本选项能让 mysqldump 很快的导出数据,并且导出的数据能很快导回。该选项默认开启,但可以用 --skip-opt 禁用。注意,如果运行 mysqldump 没有指定 --quick 或 --opt 选项,则会将整个结果集放在内存中。如果导出大数据库的话可能会出现问题。

--quick,-q
该选项在导出大表时很有用,它强制 mysqldump 从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中。

--routines,-R
导出存储过程以及自定义函数。

--single-transaction
该选项在导出数据之前提交一个 BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于事务表,例如 InnoDB 和 BDB。
本选项和 --lock-tables 选项是互斥的,因为 LOCK TABLES 会使任何挂起的事务隐含提交。
要想导出大表的话,应结合使用 --quick 选项。

--triggers
同时导出触发器。该选项默认启用,用 --skip-triggers 禁用它。

其他参数详情请参考手册,通常使用以下 SQL 来备份 MyISAM 表:

/usr/local/mysql/bin/mysqldump -uyejr -pyejr \
--default-character-set=utf8 --opt --extend

ed-insert=false \
--triggers -R --hex-blob -x db_name > db_name.sql
使用以下 SQL 来备份 Innodb 表:

/usr/local/mysql/bin/mysqldump -uyejr -pyejr \
--default-character-set=utf8 --opt --extended-insert=false \
--triggers -R --hex-blob --single-transaction db_name > db_name.sql
另外,如果想要实现在线备份,还可以使用 --master-data 参数来实现,如下:

/usr/local/mysql/bin/mysqldump -umyuser -pmypasswd \
--default-character-set=utf8 --opt --master-data=1 \
--single-transaction --flush-logs db_name > db_name.sql
它只是在一开始的瞬间请求锁表,然后就刷新binlog了,而后在导出的文件中加入CHANGE MASTER 语句来指定当前备份的binlog位置,如果要把这个文件恢复到slave里去,就可以采用这种方法来做。

2)导入
用mysqldump 备份出来的文件是一个可以直接倒入的 SQL 脚本,有两种方法可以将数据导入。
直接用 mysql 客户端
例如:
/usr/local/mysql/bin/mysql -umyuser -pmypasswd db_name < db_name.sql

用 SOURCE 语法
其实这不是标准的 SQL 语法,而是 mysql 客户端提供的功能,例如:

SOURCE /tmp/db_name.sql;
这里需要指定文件的绝对路径,并且必须是 mysqld 运行用户(例如 nobody)有权限读取的文件。

3)SQL 语法备份
(1)备份
BACKUP TABLE 语法其实和 mysqlhotcopy 的工作原理差不多,都是锁表,然后拷贝数据文件。它能实现在线备份,但是效果不理想,因此不推荐使用。它只拷贝表结构文件和数据文件,不同时拷贝索引文件,因此恢复时比较慢。
例子:

BACK TABLE tbl_name TO '/tmp/db_name/';
注意,必须要有 FILE 权限才能执行本SQL,并且目录 /tmp/db_name/ 必须能被 mysqld 用户可写,导出的文件不能覆盖已经存在的文件,以避免安全问题。

SELECT INTO OUTFILE 则是把数据导出来成为普通的文本文件,可以自定义字段间隔的方式,方便处理这些数据。
例子:

SELECT * INTO OUTFILE '/tmp/db_name/tbl_name.txt' FROM tbl_name;
注意,必须要有 FILE 权限才能执行本SQL,并且文件 /tmp/db_name/tbl_name.txt 必须能被 mysqld 用户可写,导出的文件不能覆盖已经存在的文件,以避免安全问题。

(2)恢复
用 BACKUP TABLE 方法备份出来的文件,可以运行 RESTORE TABLE 语句来恢复数据表。
例子:

RESTORE TABLE FROM '/tmp/db_name/';
权限要求类似上面所述。

用 SELECT INTO OUTFILE 方法备份出来的文件,可以运行 LOAD DATA INFILE 语句来恢复数据表。
例子:

LOAD DATA INFILE '/tmp/db_name/tbl_name.txt' INTO TABLE tbl_name;
权限要求类似上面所述。倒入数据之前,数据表要已经存在才行。如果担心数据会发生重复,可以增加 REPLACE 关键字来替换已有记录或者用 IGNORE 关键字来忽略他们。


4)

简易导入导出方法
(1)导出数据库:(命令在mysql/bin目录下)
mysqldump --opt book>book.bak //没有设置密码的时候
mysqldump -u root –p123456 --opt book > book.bak //密码被设置为123456的时候
mysqldump --opt book storybook magazine > /tmp/book.storybook.magazine.sql
注释:将数据库book中的storybook表和magazine表备份到/tmp/book.storybook.magazine.sql文件,book.storybook.magazine.sql是一个文本文件,文件名任取,打开看看会有新发现。
备份的另外一种方法:(要有操作相应文件的权限。)

(2)从导出文件导入数据:
导入数据表
mysql>source book.storybook.magazine.sql;
导入数据库
shell> mysqladmin -h localhost -u root -p123 create target_db_name
shell> mysql -h localhost -u root -p123 target_db_name < 文件名

注释:将数据库book备份到book.bak文件,book.bak是一个文本文件,文件名任取,打开看看会有新发现。

5)备份/恢复数据表
(1)备份
[mysql@as4 ~]$ mysqldump -u root -p --opt test storybook > /tmp/my1.bak

此命令是以root身份把test数据库中的storybook表结构和记录备份到/tmp/my1.bak

(2)恢复
[mysql@as4 ~]$ mysql -u root -p test < /tmp/my1.bak

把刚才备份的storybook表结构和记录文件my1.bak恢复到test数据库中,表名还是storybook

注:如果恢复的时候是先将库中的表删除,然后在把表文件复制成表,存入数据库
1.3.4 开机自动启动MySQL方法
一、加到开机自动执行文件中
[root@as4 /]# vi /etc/rc.d/rc.local
添加一行
su - mysql -c "/opt/mysql-5.0.33/bin/mysqld_safe --no-defaults &"
先切换成mysql用户身份,然后在启动MySQL服务。

二、把MySQL作为系统的一个服务
先编辑一个mysql服务文件mysql5
把mysql5文件复制到/etc/rc.d/init.d/,并增加可执行权限。
[root@as4 /]# chmod 755 /etc/init.d/mysql5
把mysql5添加到服务列表
[root@as4 /]# chkconfig --add mysql5
然后选择让mysql5在开机的时候自动启动
[root@as4 /]# chkconfig --level 3 mysql5 on

MySQL作为系统服务的启动脚本
[root@as4 ~]# vi /etc/init.d/mysql5
#!/bin/bash
#
# Startup script for the MySQL 5.0.33 Server
#
# chkconfig: - 92 27
# description: MySQL server.

# processname: mysql5
export MYSQL_BASE=/opt/mysql-5.0.33
PROFILEDIR=/var/run/mysql

start(){
if [ -f $PROFILEDIR/MYSQL_PID ]; then
echo "MySQL Server has been Running!!"
else
if [ -f $MYSQL_BASE/bin/mysqld_safe ]; then
su - mysql -c "$MYSQL_BASE/bin/mysqld_safe --defaults-file=$MYSQL_BASE/https://www.sodocs.net/doc/255565008.html,f >/dev/null 2>&1 &"
sleep 3
head -n 1 $MYSQL_BASE/data/as4.pid >$PROFILEDIR/MYSQL_PID
echo "Startting MySQL"
else
echo "MySQL File Not Founds"
fi
fi
}
stop() {
if [ -f $PROFILEDIR/MYSQL_PID ]; then
# Stop the MySQL Server 5.0.33
su - mysql -c "rm -

f $PROFILEDIR/MYSQL_PID;$MYSQL_BASE/bin/mysqladmin shutdown -u root -S $MYSQL_BASE/tmp/mysql.sock;"
echo "Stopping MySQL"
else
echo "Not Running MySQL"
fi
}

restart() {
if [ -f $PROFILEDIR/MYSQL_PID ]; then
# Restart the MySQL Server
stop
start
else
echo "Not Running MySQL"
fi
}
case "$1" in
'start')
# Start the MySQL Server 5.0.33
start
;;
'stop')
# Stop the MySQL Server 5.0.33
stop
;;
'restart')
# Restart the MySQL Server 5.0.33
restart
;;
*)
echo "Usage; `basename $0` {start|stop|restart}" 1>&2
exit 1
;;
esac
exit 0

查看 MySQL是否已经运行
1) 用netstat命令查看
[root@as4 ~]# netstat -nplt | grep mysql
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 3773/mysqld
MySQL默认监听端口是3306
2) 查看系统进程
[root@as4 ~]# ps aux|grep mysql

1.3.5 MySQL安全
MySQL管理员有责任保证数据库内容的安全性,使得这些数据记录只能被那些正确授权的用户访问,这涉及到数据库系统的内部安全性和外部安全性。
内部安全性关心的是文件系统级的问题,即,防止MySQL数据目录(DATADIR)被在服务器主机有账号的人(合法或窃取的)进行攻击。如果数据目录内容的权限过分授予,使得每个人均能简单地替代对应于那些数据库表的文件,那么确保控制客户通过网络访问的授权表设置正确,对此毫无意义。
外部安全性关心的是从外部通过网络连接服务器的客户的问题,即,保护MySQL服务器免受来自通过网络对服务器的连接的攻击。你必须设置MySQL授权表(grant table),使得他们不允许访问服务器管理的数据库内容,除非提供有效的用户名和口令。
当运行MySQL安装程序时,确保用户所存储的数据的安全性是很重要的。MySQL管理员有责任控制对数据目录和服务器的访问,并应了解以下的问题:
文件系统的安全性。UNIX 机器可能会使几个用户账号成为宿主账号,而这些账号都没有与MySQL相关的管理职责。确保这些账号没有对数据目录的访问是重要的。因为这样可以防止它们通过拷贝数据库表或移动数据库表,或者通过能够读取包含敏感信息的日志文件来损坏文件系统级的数据。您应该知道如何建立MySQL服务器的UNIX用户账号,如何建立该用户所拥有的数据目录,以及如何启动服务器以便利用该用户的权限运行。
服务器的安全性。必须了解MySQL的安全系统是怎样进行工作的,以便在建立用户账号时授予适当的权限。通过网络连接到服务器的用户只允许做他们应该做的事情。您不要由于对安全系统的错误理解,将超级用户的访问权授予匿名用户


1.3.6 MySQL常用SQL语句
一、表的三种基本操作:

插入记录、删除记

录、更新记录、 这个和sql server是一样的,你在SQL SERVER里面怎么操作,在MYSQL里面就怎么操作!没什么大区别,当然小区别还是有的。比如;insert命令,SQL SERVER2000 一次只能插入一条记录,MYSQL可以插入多条记录。
Insert into 表 (字段表列表) values(字段值),(字段值)……
删除,更新和其他数据库没有什么区别,不再累述。

1、删除数据库:DROP DATABASE 数据库名
2、删除表: DROP TABLE 表名
3、表改名: RENAME TABLE 旧表中 TO 新表名 数据库不能改名,但也不是绝对不能改,但改不好会造成里面的数据无法正常读出。
4、库改名: 常用方法是把新库创建出来,然后把旧库里的数据导入进去。

二、查询: 这是SQL中的一大块
SELECT 查询:此命令和其他数据库的没有什么大差别,关键是大家要熟练运用各种运算符,数学运算符比较简单,重点在于字符型运算符LIKE、关系运算符和逻辑运算符
如:查找姓王的记录:SELECT * FROM YUANGONG WHERE 姓名 like '王%';
查找姓名中有五的记录:SELECT * FROM YUANGONG WHERE 姓名 like '%王%';
查找以王结尾的记录:SELECT * FROM YUANGONG WHERE 姓名 like '%王';
其中linit是SQL SERVER没有的。
例如:显示第三条到第七条记录
select * from 表名 limit 2,5;
通配符 描述 示例
% 通配零个或多个任意字符
_(下划线) 通配任意一个字符
不再含有 [ ] 不同于SQL SERVER
注意:如果用like发现结果不正确,有可能是编码的问题

三、记录排序
利用order by 对记录进行排序
格式:select 字段名列表 from 表名 [where 条件] order by 排序字段1 [asc ] [desc] [排序字段2……]
如:按年龄对yuangong表进行升序排列
Select * from yuangong order by 年龄 asc 或 select * from yuangong order by 年龄
如:按年龄对yuangong表进行降序排列
Select * from yuangong order by 年龄 desc
对员工表先按性别升序排列,性别相同的再按年龄从大到小排序
Select * from 员工表 order by 性别 asc,年龄 desc

四、聚集函数:
最大值:max() 最小值 min() 平均值avg()
求和: sum() 汇总: count ()

如:求每个部门的基本工资平均值
select 部门,avg(基本工资) as 部门基本工资 from 员工表 group by 部门

显示平均基本工资大于3000的部门
Select 部门,avg(基本工资) from 员工表 group 部门 where avg(基本工资)>3000
此句错误。SQL规定在分组中使用条件不能用 WHERE 而是用 having
Select 部门,avg(基本工资) from 员工表 group by 部门 having avg(基本工资)>3000


五、多表查询:
一个数据库中的多个表,存在一定的联系,怎么样正常的显示这么表的信息?
现在有三个表:
yg
Name sex age
宋洋 男 2

0
马冬旭 女 40

gs
Name title date 单位
宋洋 AD详解 2006-11-10 清华大学
马冬旭 linux 2005-01-01 人民大学

dz
单位 地址
清华大学 五道口
人民大学 黄庄


第一种方法称为:交叉连接,在SQL SERVER中又称为笛卡尔乘积
但是要注意的默认生成的记录总数是两表记录之积
select * from yg,gs;
select * from yg,gs where https://www.sodocs.net/doc/255565008.html,=https://www.sodocs.net/doc/255565008.html,;
这才是我们想要的记录
第二种方法是用join连接:
内连接
select * from yg join gs on https://www.sodocs.net/doc/255565008.html,=https://www.sodocs.net/doc/255565008.html,
左外连接
右外连接
但没有全外连接


六、联合:
除了连接,mysql4.0以上的版本还支持UNION运算符,它用来把多个select查询号的输出连接成一个单独的结果集。大多数情况下,这个运算符用来把查询产生的结果集添加到不同的表,同时创建包括所有结果的一个单独表。比如面试的时候问你,有两个表,字段信息一样,让你用一条语句把两个表的信息组合为一个单独的表!
为了说明UNION运算符的使用方法,我们举一个例子:现在有两个表,分别存放的是男同学信息和女同学信息,如果用一个语句将所有同学的信息显示出来!
mysql> select * from nan;
+--------+-------+
| name | score |
+--------+-------+
| 彭聪留 | 80 |
| 费优优 | 81 |
| 曲权 | 82 |
+--------+-------+
3 rows in set (0.00 sec) mysql> select * from nv;
+------+-------+
| name | score |
+------+-------+
| 彭红 | 80 |
| 费红 | 81 |
| 曲红 | 82 |
+------+-------+
3 rows in set (0.00 sec)

mysql> select * from nan union select * from nv;
+--------+-------+
| name | score |
+--------+-------+
| 彭聪留 | 80 |
| 费优优 | 81 |
| 曲权 | 82 |
| 彭红 | 80 |
| 费红 | 81 |
| 曲红 | 82 |
+--------+-------+
6 rows in set (0.00 sec)
那如果有三个表怎么办?也是一样的操作。

但注意的是如果两个表的某条记录信息完全一致,则只显示为一条;如果想显示全部记录则在union后 加 all
mysql> select * from nan union all select * from nv;
如果想把显示的信息保存到一个表中怎么办?
mysql> create table 表名 select 语句;

相关主题