我们平时安装MySQL都是源码包安装的,但是由于它的编译需要很长的时间,所以,阿铭建议你安装二进制免编译包。你可以到MySQL官方网站去下载 http://dev.mysql.com/downloads/ 具体版本根据你的平台和需求而定,目前比较常用的为mysql-5.0/mysql-5.1, 5.5版本虽然已经发布有段日子了,但是貌似用在线上跑服务的还是少数。所以,阿铭建议你下载一个5.1的版本。
1.下载mysql到/usr/local/src/
cd /usr/local/src/
wget http://syslab.comsenz.com/downloads/linux/mysql-5.1.40-linux-i686-icc-glibc23.tar.gz
2.解压
[root@localhost src]# tar zxvf /usr/local/src/mysql-5.1.40-linux-i686-icc-glibc23.tar.gz
3.把解压完的数据移动到/usr/local/mysql
[root@localhost src]# mv mysql-5.1.40-linux-i686-icc-glibc23 /usr/local/mysql
4.建立mysql用户
[root@localhost src]# useradd -s /sbin/nologin mysql
5.初始化数据库
[root@localhost src]# cd /usr/local/mysql
[root@localhost mysql]# mkdir -p /data/mysql ; chown -R mysql:mysql /data/mysql
[root@localhost mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
–user 定义数据库的所属主, --datadir 定义数据库安装到哪里,建议放到大空间的分区上,这个目录需要自行创建。这一步骤很关键,如果你看到两个 “OK” 说明执行正确,否则请仔细查看错误信息,如果你实在解决不了,请把问题发到论坛 (http://www.aminglinux.com/bbs/forum-40-1.html)阿铭会来帮你解决问题。
6.拷贝配置文件
[root@localhost mysql]# cp support-files/my-large.cnf /etc/my.cnf
7.拷贝启动脚本文件并修改其属性
[root@localhost mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@localhost mysql]# chmod 755 /etc/init.d/mysqld
8.修改启动脚本
[root@localhost mysql]# vim /etc/init.d/mysqld
需要修改的地方有 “datadir=/data/mysql” (前面初始化数据库时定义的目录)
9.把启动脚本加入系统服务项,并设定开机启动,启动mysql
[root@localhost mysql]# chkconfig --add mysqld
[root@localhost mysql]# chkconfig mysqld on
[root@localhost mysql]# service mysqld start
如果启动不了,请到 /data/mysql/ 下查看错误日志,这个日志通常是主机名.err. 检查mysql是否启动的命令为:
[root@localhost mysql]# ps aux |grep mysqld
更改mysql数据库root的密码
首次进入数据库是不用密码的:
[root@localhost ~]# /usr/local/mysql/bin/mysql -uroot
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.1.40-log MySQL Community Server (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
退出的话,直接输入quit或者exit即可。细心的读者也许会发现,阿铭在上一条命令中,使用的是绝对路径,这样不方便,但是单独只是输入一个 “mysql” 命令是不行的,因为 “/usr/local/mysql/bin” 没有在 PATH 这个环境变量里。如何把它加入环境变量PATH中?之前阿铭介绍过:
[root@localhost ~]# PATH=$PATH:/usr/local/mysql/bin
这样就可以了,但重启Linux后还会失效,所以需要让它开机加载:
[root@localhost ~]# echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
[root@localhost ~]# source /etc/profile
[root@localhost ~]# mysql -uroot
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.1.40-log MySQL Community Server (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
阿铭再来解释一下上一条命令 -u 的含义,它用来指定要登录的用户,后边可以有空格,也可以无空格,root用户是mysql自带的管理员账户,默认没有密码的,那么如何给root用户设定密码?按如下操作:
[root@localhost ~]# mysqladmin -uroot password ‘yourpassword’
这样就设置了 ‘root’ 账号的密码了,不妨再来用上面的命令登陆一下试试看:
[root@localhost ~]# mysql -uroot
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password:NO)
报错了,这是在提示我们,root账号是需要密码登陆的。
[root@localhost ~]# mysql -uroot -p'yourpassword'
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.1.40-log MySQL Community Server (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
需要加一个 -p 选项,它后面可以直接跟密码,后面不可以有空格,不过密码最好用单引号括起来,不括也可以,但是密码中如果有特殊字符就会有问题了,所以最好是括起来吧。当然, -p后面也是可以不加密码,而是和用户交互的方式,让我们输入密码:
[root@localhost ~]# mysql -uroot -p
Enter password:
连接数据库
刚刚讲过通过使用 mysql -u root -p 就可以连接数据库了,但这只是连接的本地的数据库 “localhost”, 可是有很多时候都是去连接网络中的某一个主机上的mysql。
[root@localhost ~]# mysql -uroot -p -h192.168.137.10 -P3306
Enter password:
其中后边的 -P(大写) 用来指定远程主机mysql的绑定端口,默认都是3306, -h 用来指定远程主机的IP.
MySQL操作命令
首先需要切换到某个库里去:
mysql> use mysql;
Database changed
查看某个表的全部字段
mysql> desc slow_log;
也可以使用两一条命令,显示比这个更详细,而且可以把建表语句全部列出来:
mysql> show create table slow_log\G;
查看当前是哪个用户
mysql> select user();
查看当前数据库版本
mysql> select version();
查看当前mysql状态
mysql> show status;
查看mysql的参数
mysql> show variables;
修改mysql的参数
mysql> show variables like 'max_connect%';
看当前mysql服务器的队列
这个在日常的管理工作中使用最为频繁,因为使用它可以查看当前mysql在干什么,可以发现是否有锁表:
mysql> show processlist;
创建一个普通用户并授权
mysql> grant all on *.* to user1 identified by '123456';
Query OK, 0 rows affected (0.01 sec)
all 表示所有的权限(读、写、查询、删除等等操作), . 前面的 * 表示所有的数据库,后面的 * 表示所有的表,identified by 后面跟密码,用单引号括起来。这里的user1指的是localhost上的user1,如果是给网络上的其他机器上的某个用户授权则这样:
mysql> grant all on db1.* to 'user2'@'10.0.2.100' identified by '111222';
Query OK, 0 rows affected (0.01 sec)
用户和主机的IP之间有一个@,另外主机IP那里可以用%替代,表示所有主机,例如:
mysql> grant all on db1.* to 'user3'@'%' identified by '231222';
查询语句
mysql> select count(*) from mysql.user;
+----------+
| count(*) |
+----------+
| 8 |
+----------+
1 row in set (0.00 sec)
mysql.user表示mysql库的user表;count(*)表示表中共有多少行。
mysql> select * from mysql.db;
这个用来表示查询mysql库的db表中的所有数据,也可以查询单个字段或者多个字段:
mysql> select db from mysql.db;
mysql> select db,user from mysql.db;
同样,在查询语句中可以使用万能匹配 “%”
mysql> select * from mysql.db where host like '10.0.%';
** 插入一行**
mysql> insert into db1.t1 values (1, 'abc');
Query OK, 1 row affected (0.02 sec)
mysql> select * from db1.t1;
+------+------+
| id | name |
+------+------+
| 1 | abc |
+------+------+
1 row in set (0.00 sec)
更改表的某一行
mysql> update db1.t1 set name='aaa' where id=1;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from db1.t1;
+------+------+
| id | name |
+------+------+
| 1 | aaa |
+------+------+
1 row in set (0.00 sec)
清空表数据
mysql> truncate table db1.t1;
Query OK, 0 rows affected (0.01 sec)
mysql> select count(*) from db1.t1;
+----------+
| count(*) |
+----------+
| 0 |
+----------+
1 row in set (0.00 sec)
删除表
mysql> drop table db1.t1;
Query OK, 0 rows affected (0.00 sec)
删除数据库
mysql> drop database db1;
Query OK, 0 rows affected (0.02 sec)
mysql数据库的备份与恢复
备份:
[root@localhost ~]# mysqldump -uroot -p'yourpassword' mysql >/tmp/mysql.sql
使用 mysqldump 命令备份数据库,-u 和 -p 两个选项使用方法和前面说的 mysql 同样,而后面的 “mysql” 指的是库名,然后重定向到一个文本文档里。备份完后,你可以查看 /tmp/mysql.sql 这个文件里的内容。
恢复和备份正好相反:
[root@localhost ~]# mysql -uroot -p'yourpassword' mysql </tmp/mysql.sql