oracle    商业数据库
db2     IBM公司的
sybase 


mysql    开源数据库


mssql   sqlserver 微软


postgresql    informix  


ODBC  open database connector  微软提出的
JDBC java database connector      sun提出的


mysql
 性能   它把最大的精力用于提高性能
 可编程支持性   oracle  PL/SQL   sqlserver T-SQL   postgresql  pl/PGSQL
 可靠性  web2.0标准网站
 易用性  简单易用

 

三种mysql包
rpm  版      二进制   源码版      

 

================================================================

 

-------------------------------------------

 

rpm版
 yum install mysql* -y

mysql.i386                --mysql客户端和共享库           
mysql-bench.i386         --MySQL 标准描述和数据,压力测试工具      
mysql-connector-odbc.i386 --odbc数据库连接工具             
mysql-devel.i386              --mysql开发库      
mysql-server.i386          --mysql服务端           
mysql-test.i386             --测试


--注意使用rpm -qi 去查询每个包的用处

[root@dns ~]# id mysql
uid=27(mysql) gid=27(mysql) groups=27(mysql)

 

关于mysql版本
  5.1 
  5.0
  4.1 之前和4.1之后的差别很大

 ·         MySQL 5.2是最新开发的发布系列,是将执行新功能的系列。不久的将来可以使用Alpha发行,以便感兴趣的用户进行广泛的测试。

·         MySQL 5.1是当前稳定(产品质量)发布系列。只针对漏洞修复重新发布;没有增加会影响稳定性的新功能。

·         MySQL 5.0是前一稳定(产品质量)发布系列。只针对严重漏洞修复和安全修复重新发布;没有增加会影响该系列的重要功能。

·         MySQL 4.0和3.23是旧的稳定(产品质量)发布系列。该版本不再使用,新的发布只用来修复特别严重的漏洞(以前的安全问题)。

 

mysql> show databases;  --默认有三个库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |

mysql> use information_schema;  --使用这个库,或者叫进入这个库

mysql> show tables;  --查看当前库所拥有的表

mysql> desc tables;

mysql> select * from tables;

mysql> select * from tables\G;

mysql> select database();
+--------------------+
| database()         |
+--------------------+
| information_schema |
+--------------------+

 

mysql> select user(); --查看当前登录用户
+----------------+
| user()         |
+----------------+
| root@localhost |   --以root用户,本地登录


mysql> select user,host,password from mysql.user;

 

[root@dns ~]# netstat -ntlup |grep 3306
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      3720/mysqld


[root@dns ~]# ls /var/lib/mysql/ --rpm数据文件
ibdata1    
ib_logfile1 
ib_logfile0   --inodb引擎文件,information_schema一些信息在此
mysql.sock  --用于本地连接;是unix沿用下来的一种连接机制。远程连接用tcp/ip,本地也可以用tcp/ip。socket连接速度相对快一点,tcp/ip相对稳定点
mysql          --对应mysql库
test   --对应test库


[root@dns mysql]# rm /var/lib/mysql/mysql.sock
rm: remove socket `/var/lib/mysql/mysql.sock'? y

[root@dns mysql]# mysql --连接报错,找不到socket文件
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

--解决方法,重启mysqld

 

修改密码三种方法:
第一种:
[root@li ~]# mysqladmin -u root password "123" --把root用户登录密码改为123
[root@li ~]# mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

[root@li ~]# mysql -p123 --参数与密码之间没有空格
 
[root@li ~]# mysql -p --不想明文登录就使用这种方式
Enter password:

 

第二种:
mysql> update mysql.user set password=password("456") where user="root" and host="localhost";  --使用sql语句在数据库内部直接修改用户密码表,password()是一个密码加密函数
mysql> flush privileges; --修改过密码后都要记得刷新权限表


第三种:
mysql> set password for 'root'@'localhost'=password('123'); --使用此操作语句也可以修改密码,修改后不需要刷新权限表

 

mysql> select user,host,password from mysql.user;
+------+----------------+------------------+
| user | host           | password         |
+------+----------------+------------------+
| root | localhost      | 773359240eb9a1d9 |
| root | li.cluster.com |                  |
| root | 127.0.0.1      |                  |
|      | localhost      |                  |
|      | li.cluster.com |                  |
+------+----------------+------------------+
--另外四个用户不安全,所以下面把它们都删除掉


mysql> delete from mysql.user where host="li.cluster.com" or host="127.0.0.1";
mysql> delete from mysql.user where user="";


mysql> select user,host,password from mysql.user;
+------+-----------+------------------+
| user | host      | password         |
+------+-----------+------------------+
| root | localhost | 773359240eb9a1d9 |
+------+-----------+------------------+


--------------


mysql> show variables; --查看mysql的当前参数和对应的值

 

 

mysql的配置文件,rpm 版默认为/etc/my.cnf

[mysqld] --用中括号括起来的叫参数组,用来针对不同的工具设定参数
datadir=/var/lib/mysql --数据文件存放的目录
socket=/var/lib/mysql/mysql.sock --socket文件是用于本地连接mysql数据库的接口文件,远程连接的话就要通过TCP/IP协议
user=mysql --管理mysql的系统用户
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1 --用于兼容3.x版本的密码格式,老密码格式为16位

[mysqld_safe]
log-error=/var/log/mysqld.log --日志文件
pid-file=/var/run/mysqld/mysqld.pid --pid文件

--注意,pid文件和socket文件是服务启动成功后才会有的


例:理解参数组

在/etc/my.cnf 后面加上一段

[client]  --针对客户端登录时的参数组
password=123  --客户端登录时直接使用123这个密码了


/etc/init.d/mysqld restart

mysql   --再次登录就不需要密码了


-----------------------------------------------------------------

忘记密码如何修改

1,可以在配置文件里加上
skip-grant-tables --注意写到[mysqld]参数组下,表示跳过授权


2,/etc/init.d/mysql5  reload

mysql    --登录就不需要密码,进去改密码

3,改完后记得去掉skip-grant-tables重新reload


4,再使用新的密码登录

==================================


二进制版

就是指已经编译OK的版本,和rpm版一样功能已经定制好了,如果要使用新功能就需要重新编译


shell>  groupadd mysql

shell> useradd -g mysql mysql

shell> cd /usr/local

shell> gunzip < /path/to/mysql-VERSION-OS.tar.gz | tar xvf -

shell> ln -s full-path-to-mysql-VERSION-OS mysql

shell> cd mysql

shell> scripts/mysql_install_db --user=mysql

shell> chown -R root  .

shell> chown -R mysql data

shell> chgrp -R mysql .

shell> bin/mysqld_safe --user=mysql &

 

 

# tar xvf /share/soft/lamp/mysql_source/mysql-5.1.36-linux-i686-glibc23.tar.gz -C /usr/local/


# cd /usr/local/
# mv mysql-5.1.36-linux-i686-glibc23/ mysql

# cp support-files/mysql.server /etc/init.d/mysql2  --拷贝服务脚本
# chmod 755 /etc/init.d/mysql  

# vim /etc/init.d/mysql2
  conf=/usr/local/mysql/etc/my.cnf --修改读取的配置文件路径,不要读/etc/my.cnf,因为我们rpm版也装着,不让他们冲突

# mkdir /usr/local/mysql/etc

# vim /usr/local/mysql/etc/my.cnf --建立新的配置文件路径,写上基础参数

[mysqld]
datadir=/usr/local/mysql/data
port=3307
socket=/var/run/mysqld/mysql2.socket
pid=/var/run/mysqld/mysql2.pid
log-error=/var/log/mysqld/mysql2.log


# mkdir /var/run/mysqld/ /var/log/mysqld
# chown mysql.mysql -R /usr/local/mysql/ /var/run/mysqld /var/log/mysqld
--创建配置文件里相应的目录,并修改权限为mysql的owner和group


# /usr/local/mysql/scripts/mysql_install_db --datadir=/usr/local/mysql/data --user=mysql
--初始化

# /etc/init.d/mysql2 start --启动服务

# lsof -i:3307
COMMAND  PID  USER   FD   TYPE DEVICE SIZE NODE NAME
mysqld  6541 mysql   10u  IPv4  36974       TCP *:opsession-prxy (LISTEN)

# /usr/local/mysql/bin/mysql --直接登录报错,因为默认socket路径它不能找到
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)


解决方法:
# vim /usr/local/mysql/etc/my.cnf  --加上下面两句
[client]
socket=/var/run/mysqld/mysql2.socket

 

# /usr/local/mysql/bin/mysql --再次登录就成功了

 

=======================================================

                                 
源码版

三种版本的比较:

rpm   安装方便,功能已经定制好
二进制 安装比较方便,功能也是已经定制好,但有所选择
源码版 安装过程比较麻烦,要求技术水平高,但能自己去定制需要的功能,生产环境下尽量使用这种版本

 


# tar xf /share/soft/lamp/mysql_source/mysql-5.1.36.tar.gz -C /usr/src/
# cd /usr/src/mysql-5.1.36/


编译参数简单介绍

./configure --help  > /root/Desktop/mysqlconfigure.help

  --prefix  安装软件的家目录
  --enable-local-infile 允许外部表格数据导入到数据库
  --with-charset  字符集  mysql大概支持30多种字符集
  --with-collation  字符的校验规则,mysql大概支持80多种
  --with-extra-charsets 扩展字符集
  --with-server-suffix 数据库头名,  -max mysql发布有新特性,还没有通过正式的测试,主要用来提升用户的认识
  --with-pthread 线程库
  --with-unix-socket-path socket接口路径
  --with-tcp-port 端口
  --with-mysqld-user 运行mysql的系统用户
  --with-libwrap 支持tcp_trapper
  --without-debug 关闭debug信息,mysql数据库会产生一些debug调试信息,对性能有一定的影响,如果不需要这种信息,可以用此参数关闭
  --with-mysqld-ldflags 
    --with-client-ldflags 静态编译可以把性能提高5%到10%
  --with-low-memory  支持低内存,避免内存限制
  --with-mysqlmanager 多启动的管理器
  --with-big-tables 支持大表

 定义存储引擎的支持的相关参数:
  --with-example-storage-engine
   --with-archive-storage-engine
  --with-csv-storage-engine
  --with-blackhole-storage-engine
  --with-ndbcluster
  --with-federated-storage-engine

--在5.1之后,存储引擎做成插件式存储引擎,使用--with-plugins参数来指定编译进去的存储引擎


--这是5.0.33的供参考
[root@li mysql-5.0.33]# ./configure --prefix=/usr/local/mysql --enable-local-infile --with-charset=gbk --with-extra-charsets=gb2312,utf8 --with-pthread --with-libwrap --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-low-memory --with-mysqlmanager --with-big-tables --with-example-storage-engine --with-archive-storage-engine --with-csv-storage-engine --with-blackhole-storage-engine  --with-ndbcluster --with-federated-storage-engine

 

编译前准备:
1,开发工具和开发库这两个组要安装
yum groupinstall "开发工具" "开发库"


2,df -h 查看一下空间是否够


3,cat /proc/cpuinfo 查看CPU信息,单核相对于多核来说,编译速度要慢一些


[root@li mysql-5.1.36]# ./configure --prefix=/usr/local/mysql --enable-assembler --enable-profiling --enable-local-infile --with-charset=gbk --with-extra-charsets=utf8,gb2312 --with-pthread --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static --with-low-memory --with-big-tables --with-mysqlmanager --with-plugins=myisam,innobase,ndbcluster

#make ;make install

 

编译完成后:
# ls /usr/local/mysql/ --编译完成后这个目录就有了
bin  include  info  lib  libexec  man  mysql-test  share  sql-bench

第一步:手动编写配置文件

[root@li /]# mkdir /usr/local/mysql/etc --建立一个存放配置文件的目录


[root@li /]# vim /usr/local/mysql/etc/my.cnf --编写my.cnf

[mysqld]
port=3307  --端口不要和rpm版的3306冲突,这里使用3307
datadir=/data  --数据文件存放目录
socket=/var/run/mysqld/mysql5.socket --这里的mysql5是自定义的
pid-file=/var/run/mysqld/mysql5.pid
log=/var/log/mysqld/mysql5.log
log-err=/var/log/mysqld/mysql5-err.log

--这两个日志参数都有点问题,但不影响启动。在明天讲日志文件时来进行修改

第二步:建立配置文件里所写的相关目录,并修改相应的权限
[root@li /]# mkdir /data   /var/run/mysqld/  /var/log/mysqld

[root@li /]# chown mysql.mysql /data  /var/log/mysqld /var/run/mysqld/ /usr/local/mysql/  -R


第三步:配置服务脚本
[root@li /]# cp /usr/src/mysql-5.1.36/support-files/mysql.server /etc/init.d/mysql5 --拷贝服务脚本模版到正确的位置

[root@li /]# vim /etc/init.d/mysql5  --修改使之指向新编写的配置文件
conf=/usr/local/mysql/etc/my.cnf --修改这句

[root@li /]# chmod 755 /etc/init.d/mysql5  --给服务脚本加执行权限


第四步:初始化数据库,第一次都需要初始化
[root@li /]# /usr/local/mysql/bin/mysql_install_db --datadir=/data/ --user=mysql


第五步:启动服务,并登录
/etc/init.d/mysql5  start


# /usr/local/mysql/bin/mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)
--上面找不到socket文件,因为我编译时没有把下面这个参数指定,所以默认找/tmp/mysql.sock
--with-unix-socket-path


[root@li /]# /usr/local/mysql/bin/mysql --socket=/var/run/mysqld/mysql5.socket  
--现在登录需要指定socket文件的位置,要想不指定,可以按下面方法做


登录时不指定socket的方法:
在配置文件/usr/local/mysql/etc/my.cnf下加上如下一段
[client]
socket=/var/run/mysqld/mysql5.socket


[root@li /]# /usr/local/mysql/bin/mysql   --再次登录就不需要指定socket文件了


--为了登录方便(输入/usr/local/mysql/bin/mysql太长),可以用下面的方法来做,然后使用mysql5这个命令来登录
# cp /usr/local/mysql/bin/mysql /bin/mysql5

-----------------------------------------------------

关于mysql数据库启动问题的排错:
熟悉上面五步,一般是权限问题,参数是否写错,空间是否满


重新初始化数据库;如果还不能启动,查看一下进程,是否有进程卡死


使用下面命令去查看配置文件写否有误;如果没有报错,则表示OK,并会把数据库的所有参数和对应的值给打印出来
/usr/local/mysql/libexec/mysqld --verbo --help

 

==============================================================

 

尝试安装最新的mysql-5.5.13的源码版


下载路径为:
http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.13.tar.gz/from/http://mysql.mirror.rafal.ca/

 

MySQL5.5版本中,编译的选项同样众多,DBA可以通过# cmake . -LH 查看支持的参数,或者浏览下列页面:http://dev.mysql.com/doc/refman/5.5/en/source-configuration-options.html,查看编译时可指定参数的详细描述。


一些常用参数如下:

    * CMAKE_INSTALL_PREFIX:指定MySQL程序的安装目录,默认/usr/local/mysql
    * DEFAULT_CHARSET:指定服务器默认字符集,默认latin1
    * DEFAULT_COLLATION:指定服务器默认的校对规则,默认latin1_general_ci
    * ENABLED_LOCAL_INFILE:指定是否允许本地执行LOAD DATA INFILE,默认OFF
    * WITH_COMMENT:指定编译备注信息
    * WITH_xxx_STORAGE_ENGINE:指定静态编译到mysql的存储引擎,MyISAM,MERGE,MEMBER以及CSV四种引擎默认即被编译至服务器,不需要特别指定。
    * WITHOUT_xxx_STORAGE_ENGINE:指定不编译的存储引擎
    * SYSCONFDIR:初始化参数文件目录
    * MYSQL_DATADIR:数据文件目录
    * MYSQL_TCP_PORT:服务端口号,默认3306
    * MYSQL_UNIX_ADDR:socket文件路径,默认/tmp/mysql.sock


# tar xf cmake-2.8.4.tar.gz -C /usr/src/
# cd /usr/src/cmake-2.8.4/
# ./configure ; make ;make install


--我下面把mysql-5.5.13安装到/usr/local/mysql55这个目录,与mysql5.1.36共存

# tar xvf mysql-5.5.13.tar.gz -C /usr/src
# cd /usr/src/mysql-5.5.13/
# cmake . -LAH  <--查看编译配置选项
# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql55 -DDEFAULT_CHARSET=gbk -DDEFAULT_COLLATION=gbk_chinese_ci -DWITH_EXTRA_CHARSETS=utf8,gb2312 -DENABLED_LOCAL_INFILE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1

# make ;make install


安装后
1,手动编写my.cnf配置文件
[root@li /]# mkdir /usr/local/mysql55/etc
[root@li /]# vim /usr/local/mysql55/etc/my.cnf

[mysqld]
port=3308
datadir=/data55
pid-file=/var/run/mysqld/mysql55.pid
socket=/var/run/mysqld/mysql55.socket
log=/var/log/mysqld/mysql55.log
log-error=/var/log/mysqld/mysql55-err.log

[client]
socket=/var/run/mysqld/mysql55.socket


第二步:创建相关目录,并修改权限
[root@li /]# mkdir /data55 /var/run/mysqld /var/log/mysqld
[root@li /]# chown mysql.mysql /data55 /var/run/mysqld /var/log/mysqld /usr/local/mysql55/   -R

 


第三步:初始化数据库
# /usr/local/mysql55/scripts/mysql_install_db --defaults-file=/usr/local/mysql55/etc/my.cnf
--这样不行,会报FATAL ERROR: Could not find ./bin/my_print_defaults

--用下面的命令来初如化,并且一定要加上--user=mysql参数(因为我前面的my.cnf配置文件里没有写,所以这里要加,否则初始化后的数据权限属主和属组为root)
# cd /usr/local/mysql55/
# ./scripts/mysql_install_db --defaults-file=/usr/local/mysql55/etc/my.cnf  --user=mysql


第四步:启动服务,看是否登录OK
建议不要用服务脚本来启动,因为默认服务脚本就是在/usr/local/mysql这个目录,如果要改的话,得把服务脚本里相关变量都得改成/usr/local/mysql55才行,这里避免麻烦,就直接用mysqld_safe来启动

# /usr/local/mysql55/bin/mysqld_safe --defaults-file=/usr/local/mysql55/etc/my.cnf &


# /usr/local/mysql55/bin/mysql --socket=/var/run/mysqld/mysql55.socket


--如果需要服务脚本的支持,则做下列操作
[root@li mysql55]# cp /usr/local/mysql55/support-files/mysql.server /etc/init.d/mysql55


#vim /etc/init.d/mysql55
conf=/usr/local/mysql55/etc/my.cnf

#/etc/init.d/mysql55 start  --启动服务

 

=======================================

用服务脚本启服务容易搞乱,建议大家使用mysqld_safe直接加参数来启
把上面安装的三个mysql启起来

启rpm版
/usr/bin/mysqld_safe --defaults-file=/etc/my.cnf &
启5.1.36版
/usr/local/mysql/bin/mysqld_safe --defaults-file=/usr/local/mysql/etc/my.cnf &
启5.5.13版
/usr/local/mysql55/bin/mysqld_safe --defaults-file=/usr/local/mysql55/etc/my.cnf &

# netstat -ntlup |grep :33
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      29467/mysqld       
tcp        0      0 0.0.0.0:3307                0.0.0.0:*                   LISTEN      29552/mysqld       
tcp        0      0 :::3308                     :::*                        LISTEN      29682/mysqld 

 

然后分别登录到不同版本的数据库进行查找对比
mysql> show engines;  --对比一下两边的引擎

mysql> show variables; --查看所有变量

mysql> show variables like "have%"; --可以查看支持的引擎的情况,like是模糊查询