mysql第一天,先讲讲我对mysql的看法。mysql无疑是开源数据库中发展最好的,不过在sun被oracle收购后,我并不是很看好他的发展。对于我们这些应用者来说,由于LAMP使用很广泛,mysql如今的发展已经很能够支撑很长一段时间。所以,我今天就一步一步记录mysql的学习过程。同时,我还会关注postgresql和nosql方面的咨询。
一、简介
使用mysql的理由:简单、易用、使用广泛。
安装方式:rpm版;二进制;源码版(linux推荐使用)
软件版本:现在虽然在更新,但幅度并不是很大,最新是5.5,建议大家使用5.2版本以上即可。
-----------------------------------------------------------------
二、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 --mysql测试
安装路径:
# ls /var/lib/mysql/ --rpm数据文件
ibdata1
ib_logfile1
ib_logfile0 --inodb引擎文件,information_schema一些信息在此
mysql.sock --用于本地连接
mysql --对应mysql库
test --对应test库
# vim /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文件是服务启动成功后才会有的
[client] --针对客户端登录时的参数组
password=123 --客户端登录时直接使用123这个密码了
-----------------------------------------------------------------
三、二进制版安装
已经编译过的版本和rpm版一样功能已经定制好了,相当于windows下的绿色版,只需要解压即可运行。但linux下要手动做一些操作
1、添加用户mysql和用户组mysql
groupadd mysql
useradd -g mysql mysql
2、解压tar包
tar -xvf mysql-5.1.36-linux-i686-glibc23.tar.gz -C /usr/local
3、改名为mysql
cd /usr/local
mv mysql-5.1.36-linux-i686-glibc23/ mysql
4、修改属组
chown mysql.mysql -R /usr/local/mysql
5、安装初始化
/usr/local/mysql/scripts/mysql_install_db --datadir=/usr/local/mysql/data --user=mysql
-----------------------------------------------------------------
四、源码版
安装过程比较麻烦,要求技术水平高,但能自己去定制需要的功能,生产环境下尽量使用这种版本
安装过程:
1、添加用户mysql和用户组mysql
groupadd mysql
useradd -g mysql mysql
2、解压tar包
tar -xvf mysql-5.0.33.tar.gz -C /usr/src
3、编译
编译前准备:
a、开发工具和开发库这两个组要安装
yum groupinstall "开发工具" "开发库"
b、df -h 查看一下空间是否够
# ./configure
--prefix=/usr/local/mysql --指定安装目录
--enable-local-infile --允许外部表格数据导入到数据库中
--with-charset=gbk --字符集
--with-extra-charsets=gb2312,utf8 --扩展字符集
--with-pthread --线程库
--with-libwrap --支持tcp_trapper
--with-mysqld-ldflags=-all-static --静态编译可以把性能提高5%到10%
--with-client-ldflags=-all-static --静态编译可以把性能提高5%到10%
--with-low-memory --支持低内存,避免内存限制
--with-mysqlmanager --多启动的管理器,可分布出多个mysql服务器
--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 --存储引擎参数
4、安装
# make ;make install
5、修改配置文件
mkdir /usr/local/mysql/etc --建立一个存放配置文件的目录
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
6、建立配置文件里所写的相关目录,并修改相应的权限
# mkdir /data /var/run/mysqld/ /var/log/mysqld
# chown mysql.mysql /data /var/log/mysqld /var/run/mysqld/ /usr/local/mysql/ -R
7、配置服务脚本
# cp /usr/src/mysql-5.0.33/support-files/mysql.server /etc/init.d/mysql5 --拷贝服务脚本模版到正确的位置
# vim /etc/init.d/mysql5 --修改使之指向新编写的配置文件
conf=/usr/local/mysql/etc/my.cnf --修改这句
# chmod 755 /etc/init.d/mysql5 --给服务脚本加执行权限
8、初始化数据库,第一次都需要初始化
# /usr/local/mysql/bin/mysql_install_db --datadir=/data/ --user=mysql
9、启动服务,并登录
/etc/init.d/mysql5 start
五、常用mysql命令行工具介绍:
ls /usr/local/mysql/bin/ --都在此目录下
1,mysql 一个命令行客户端程序,可以批处理方试执行sql语句,还可以用于恢复
# /usr/local/mysql/bin/mysql < /mysql.sql
Database
information_schema
mysql
source
test
# /usr/local/mysql/bin/mysql <<EOF
> show databases;
> Database
information_schema
mysql
source
test
2,mysqld 服务启动时的程序,
mysql_safe 在mysqld上增加了一些安全特性,它可以读[mysqld]参数组和[mysql_safe]参数组,现在都是用这种方式来启动的
/usr/local/mysql/bin/mysqld_safe & --可以用这种方式来启动,写到/etc/rc.local实现开机自启动
3,mysql_install_db 初始化数据库工具
4,mysqladmin 管理工具
可以用于数据库的一些状态监控
# /usr/local/mysql/bin/mysqladmin ping
mysqld is alive
# /usr/local/mysql/bin/mysqladmin status
Uptime: 323 Threads: 1 Questions: 2 Slow queries: 0 Opens: 11 Flush tables: 1 Open tables: 6 Queries per second avg: 0.006
# /usr/local/mysql/bin/mysqladmin processlist
+----+------+-----------+----+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------+----+---------+------+-------+------------------+
| 3 | root | localhost | | Query | 0 | | show processlist |
+----+------+-----------+----+---------+------+-------+------------------+
5,mysqlcheck
myisamchk 两个工具都是用来检查,维护,优化,分析myisam表的工具
区别:mysql运行时使用mysqlcheck,没有运行时使用myisamchk
6,mysqldump 导出数据,备份数据库
导出数据还有一种方法: select * from tab into outfile "/path/filename"
7,mysqlimport 导入数据
load data local infile 也可以导入数据
8,mysqlhotcopy 热备份工具
9,mysqlbinlog 二进制日志读取工具
10,mysqlbug 收集bug信息,传给官方
11,mysqld_multi mysql多启动
12, mysql_fix_privilege_tables 修复权限表,一般升级数据库后,要用些命令刷新
六、mysql内部命令
登录
mysql -u root -p123
mysql> show databases; --默认有三个库
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
mysql> use mysql; --使用这个库,或者叫进入这个库
mysql> show tables; --查看当前库所拥有的表
mysql> select user(); --查看当前登录用户
mysql> show engines; --对比一下两边的引擎
mysql> show variables; --查看所有变量
mysql> show variables like "have%"; --可以查看支持的引擎的情况,like是模糊查询
注意事项:
1、下载的源码包的MD5值问题,以防有木马等存在
md5sum /etc/passwd --可以使用md5sum这个命令来检测文件或者软件包的md5值
修改密码三种方法:
第一种:
# mysqladmin -u root password "123" --把root用户登录密码改为123
# mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
# mysql -p123 --参数与密码之间没有空格
# 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'); --使用此操作语句也可以修改密码,修改后不需要刷新权限表
忘记密码如何修改
1,可以在配置文件里加上
skip-grant-tables --注意写到[mysqld]参数组下,表示跳过授权
也可以[root@hu ~]# /usr/local/mysql/bin/mysqld_safe --skip-grant-tables &
2,/etc/init.d/mysql5 reload
/usr/local/mysql/bin/mysql --登录就不需要密码,进去改密码
3,改完后记得去掉skip-grant-tables重新reload