【转】MySQL源码包在Linux上安装和配置

作者:庞劲松 工作单位:广东省Linux公共服务技术支持中心

http://bbs.chinaunix.net/thread-1821133-1-1.html

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

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

1.3 管理MySQL
在运行数据库系统时, MySQL的使用相当简单,且进行MySQL安装和使用所需的工作也很少。MySQL的简单性可能就是它极为普及的原因,尤其是在非程序员人群中的普及。当然,它对于训练有素的计算机专业人员也是有帮助的,但肯定不是对运行一个成功的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的密码,也无法从internet上直接访问数据库,只能通过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)将id设为长度为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 --extended-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)有权限读取的文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值