概述:
MySQL 是一个真正的多线程,多用户的SQL数据库服务,凭借其高性能、高可靠和易于使用的特性,成为服务器领域中最受欢迎的开源数据库系统。目前由Oracle公司开发和维护
官方站点:http://ww.mysql.com
1.MySQL的特点:
多线程、多用户
基于C/S(客户端/服务器)架构
简单易用、查询速度快
安全可靠
Mysql安装
2.准备工作
操作系统 |
IP地址 |
主机名 |
软件包列表 |
CentOS 6.5_x84_64 |
192.168.6.10 |
Crushlinux |
mysql-5.5.22.tar.gz |
为了避免发生端口冲突,程序冲突,建议先查询确认没有使用RPM方式安装mysql-server、mysql
[root@crushlinux ~]# rpm -q mysql-server mysql
package mysql-server is not installed
mysql-5.1.71-1.el6.x86_64
3.安装cmake
mysql5.5以上的版本都需要cmake编译。而不是./configure,所以需要安装cmake
[root@crushlinux/]#tar xf cmake-2.8.6.tar.gz
[root@crushlinux/]#cd cmake-2.8.6
[root@crushlinuxcmake-2.8.6]# ./configure
[root@crushlinuxcmake-2.8.6]# gmake && gmake install
或者是
[root@crushlinux/]#yum -y install cmake
4.源码编译及安装
创建mysql用户
[root@crushlinuxcmake-2.8.6]# groupadd mysql
[root@crushlinuxcmake-2.8.6]# useradd -M -s /sbin/nologin -g mysql mysql
5.解包,编译、安装
[root@crushlinux/]# tar xf mysql-5.5.22.tar.gz
[root@crushlinux/]# cd mysql-5.5.22
[root@crushlinuxmysql-5.5.22]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all
-DCMAKE_INSTALL_PREFIX: 指定数据库安装目录
-DSYSCONFDIR=/etc :指定配置文件目录
-DDEFAULT_CHARSET:指定默认使用的字符集编码。如utf8
-DDEFAULT_COLLATION=utf8_general_ci:设定默认排序规则(utf8_general_ci快速/utf8_unicode_ci准确)
-DEXTRA_CHARSETS=all:启用额外的字符集类型(默认为all)
如下图表示编译完成
6.安装后的其他调整
配置
[root@crushlinux mysql-5.5.22]# make && make install
7.权限调整
[root@crushlinuxmysql-5.5.22]# chown -R mysql:mysql /usr/local/mysql
8.建立配置文件
[root@crushlinuxmysql-5.5.22]# rm -rf /etc/my.cnf
[root@crushlinuxmysql-5.5.22]# cp support-files/my-medium.cnf /etc/my.cnf
9.初始化数据库
[root@crushlinuxmysql-5.5.22]# cd /usr/local/mysql/
[root@crushlinuxmysql]# scripts/mysql_install_db --user=mysql --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
初始化完成!
如果报pid错误,则为初始化失败,将usr/local/mysql/data目录下的文件全部删除
10.设置软连接
为了在任何目录下都能使用mysql命令。可以创建软连接
[root@crushlinuxmysql]# ln -s /usr/local/mysql/bin/* /usr/local/bin/
11.将mysql添加为系统服务
[root@crushlinux/]# cd mysql-5.5.22/support-files
[root@crushlinuxsupport-files]# cp mysql.server /etc/init.d/mysqld
[root@crushlinuxsupport-files]# chmod +x /etc/init.d/mysqld
[root@crushlinuxsupport-files]# chkconfig --add mysqld
12. 启动mysql服务
[root@crushlinuxsupport-files]# service mysqld start
Starting MySQL... [确定]
[root@crushlinuxsupport-files]# netstat -antp |grep mysqld
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 21692/mysqld
登陆验证
[root@crushlinux/]# mysql
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
mysql搭建完成
实验部分
1.登录到mysql服务器
[root@crushlinux/]# mysql -u root //-u:指定认证用户
在有密码的情况下使用:
[root@crushlinux/]# mysql -u root -p //-p:指定密码登陆
Enter password:
-h 指定主机
-P 指定端口
1.设置数据库用户的密码
[root@crushlinux~]#mysqladmin –u root passwd “123456”
2.执行mysql操作语句
每一句mysql语句以‘;’表示结束
3.查看当前数据库服务的日志文件信息--show master logs
mysql> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 27314 |
| mysql-bin.000002 | 1031892 |
| mysql-bin.000003 | 107 |
+------------------+-----------+
3 rows in set (0.00 sec)
4.退出“mysql>”操作环境--exit,quit,ctrl+C
mysql> exit
Bye
5.查看mysql版本--select version ()
select version ();
mysql> select version();
+------------+
| version() |
+------------+
| 5.5.22-log |
+------------+
1 row in set (0.02 sec)
6.查看当前服务器中有哪些库-----show databases
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema | 保证兼容性,mysql运行当中位于内存中的信息,关机后是空的
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.24 sec)
7.mysql> USE mysql; //切换数据库
8.查看当前使用的库中有哪些表----show tables,或者 select databaese();
mysql> show tables;
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| event |
| func |
| general_log |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| host |
| ndb_binlog_index |
| plugin |
| proc |
| procs_priv |
| proxies_priv |
| servers |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
24 rows in set (0.00 sec)
9.查看表的结构—describe
mysql> describe user;
10.查看更详细的表内容---show create table;
11. 创建新的数据库-- create database数据库名
mysql> create database auth;
Query OK, 1 row affected (0.04 sec)
12.创建新的数据表-- create table表名 (字段1 名称类型,字段2 名称类型,。。。。。。。)
mysql> create table hahaha (xingming char(16),xingbie char(2));
Query OK, 0 rows affected (0.23 sec)
13. 删除一个数据表—drop table[数据库名.]表名
mysql> drop tables auth.hahaha;
Query OK, 0 rows affected (0.03 sec)
14.删除一个数据库—-drop database 数据库名
mysql> drop database auth;
Query OK, 0 rows affected (0.04 sec)
15. 插入新的数据记录---insert into表名(字段1, 字段2, ……) VALUES(字段1的值, 字段2的值, ……)
mysql> use auth;
Database changed
mysql> INSERT INTO users(user_name,user_passwd) VALUES('zhangsan', PASSWORD('123456'));
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO users VALUES('lisi', PASSWORD('654321'));
Query OK, 1 row affected (0.00 sec)
16.查询数据记录-- SELECT 字段名1,字段名2 …… FROM 表名 WHERE 条件表达式
mysql> select * from auth.users; 查询auth.users表记录
+-----------+-------------------------------------------+
| user_name | user_passwd |
+-----------+-------------------------------------------+
| zhangsan | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| lisi | *2A032F7C5BA932872F0F045E0CF6B53CF702F2C5 |
+-----------+-------------------------------------------+
2 rows in set (0.00 sec)
mysql> SELECT user_name,user_passwd FROM auth.users where user_name= 'zhangsan'; 查询用户名为zhangsan的记录
17. 修改数据记录 ---UPDATE 表名 SET 字段名1=值1[,字段名2=值2] WHERE 条件表达式
mysql> UPDATE auth.users SET user_passwd=PASSWORD('') WHERE user_name='lisi'; 更改lisi的密码为空
mysql> select * from auth.users
例子:以下操作可以将数据库用户root的密码设为“123456”,当再次使用“mysql –u root –p”访问MySQL数据库服务器时,必须使用此密码进行验证。
mysql> UPDATE mysql.user SET password=PASSWORD('123456') WHERE user='root'; 更改root密码为123456
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from auth.users;
+-----------+-------------------------------------------+
| user_name | user_passwd |
+-----------+-------------------------------------------+
| zhangsan | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| lisi | |
+-----------+-------------------------------------------+
2 rows in set (0.00 sec)
mysql> FLUSH PRIVILEGES; 刷新授权表,让mysql进程重读授权表
18.删除数据记录---DELETE FROM 表名 WHERE 条件表达式
mysql> DELETE FROM auth.users WHERE user_name='lisi';
Query OK, 1 row affected (0.00 sec)
mysql> SELECT * FROM auth.users;
+-----------+-------------------------------------------+
| user_name | user_passwd |
+-----------+-------------------------------------------+
| zhangsan | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-----------+-------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT user,host,password FROM mysql.user WHERE user='';
+------+-----------+----------+
| user | host | password |
+------+-----------+----------+
| | localhost | |
| | www | |
+------+-----------+----------+
2 rows in set (0.00 sec)
mysql> DELETE FROM mysql.user WHERE user='';
Query OK, 2 rows affected (0.01 sec)
维护MySQL数据库
MySQL数据库系统的维护工作主要包括:
用户权限的设置、数据库的备份与恢复
1. 授予权限---GRANT 权限列表 ON 数据库名.表名 TO 用户名@来源地址 [ IDENTIFIED BY ‘密码’ ]
权限列表:用于列出授权使用的各种数据库操作,以逗号进行分隔,如“select,insert,update”。使用“all”表示所有权限,可授权执行任何操作。
库名.表名:用于指定授权操作的库和表的名称,其中可以使用通配符“*”。例如,使用“auth.*”表示授权操作的对象为auth库中的所有表。
用户名@来源地址:用于指定用户名称和允许访问的客户机地址,即谁能连接,能从哪里连接。来源地址可以是域名、IP地址,还可以使用“%”通配符,表示某个区域或网段内的所有地址,如“%.benet.com”、“192.168.1.% 等。
IDETIFIED BY:用于设置用户连接数据库时所使用的密码字符串。在新建用户时,若省略“IDETIFIED BY”部分,则用户的密码将为空。
mysql> GRANT select ON auth.* TO 'xiaoqi'@'localhost' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)
[root@crushlinux ~]# mysql -u xiaoqi -p
……
mysql> SELECT * FROM auth.users; 验证授权的访问操作
+-----------+-------------------------------------------+
| user_name | user_passwd |
+-----------+-------------------------------------------+
| zhangsan | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-----------+-------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT * FROM mysql.user; 验证非授权的访问操作
ERROR 1142 (42000): SELECT command denied to user 'xiaoqi'@'localhost' for table 'user'
2. 查看权限--SHOW GRANTS FOR 用户名@来源地址
mysql> SHOW GRANTS FOR 'dbuser'@'192.168.4.19'; 查看dbuser从主机192.168.4.9访问时的权限
+------------------------------------------------------------------------------------+
| Grants for dbuser@192.168.4.19 |
+------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'dbuser'@'192.168.4.19' IDENTIFIED BY PASSWORD
'*760F60073FD235571A5260444301DB22136ED604' |
| GRANT ALL PRIVILEGES ON `bdqn`.* TO 'dbuser'@'192.168.4.19' |
+------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
3.撤销权限---REVOKE 权限列表 ON 数据库名.表名 FROM 用户名@来源地址
mysql> REVOKE all ON auth.* FROM 'xiaoqi'@'localhost';
Query OK, 0 rows affected (0.01 sec)
mysql> SHOW GRANTS FOR 'xiaoqi'@'localhost'; 确认已撤销对auth库的权限
+------------------------------------------------------------------------------------+
| Grants for xiaoqi@localhost |
+------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'xiaoqi'@'localhost' IDENTIFIED BY PASSWORD
'*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
+------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
4. 数据库的备份与恢复
方法1:可直接备份目录 /usr/local/mysql/var
方法2:使用专用备份工具 mysqldump
备份数据库操作
mysqldump -u 用户名 -p [密码] [选项] [数据库名] [表名] > /备份路径/备份文件名
常见选项:
--all-databases
--opt
5.执行导出操作
使用mysqldump命令导出数据时,默认会直接在终端显示,若要保存到文件,还需要结合shell的“>”重定向输出操作,命令格式如下所示。
格式1:导出指定库中的部分表。
Mysqldump [选项] 库名 [表名1] [表名2] … > /备份路径/备份文件名
格式2:导出一个或多个完整的库(包括其中所有表)。
mysqldump [选项] –databases 库名 1 [库名2] …… > /备份路径/备份文件名
格式3:备份MySQL服务器中所有的库。
Mysqldump [选项] –-all-–databases > /备份路径/备份文件名
例子:以下操作分别使用格式1、格式2、将mysql库中的user表导出为mysql-user.sql,将整个auth库导出为auth.sql文件,所有操作均以root用户的身份进行验证。
[root@crushlinux ~]# mysqldump -u root -p mysql user > mysql-user.sql
备份mysql库的user表
Enter password:
[root@crushlinux ~]# mysqldump -u root –p auth > auth.sql 备份auth库
Enter password:
[root@crushlinux ~]# mysqldump -u root -p --opt --all-databases > all-data.sql 备份所有数据库
Enter password:
6.查看备份文件内容
通过mysqldump工具导出的SQL脚本是文本文件,其中“/*…*”部分或以“--”开头的行表示注释信息。
例子:执行以下操作可以过滤出auth.sql脚本中的数据库操作语句。
grep –v “^--” auth.sql |grep –v “^/” |grep –v “^$”
7. 恢复操作
mysql -u root -p [数据库名] < /备份路径/备份文件名
[root@crushlinux ~]# mysql -u root -p test < mysql-user.sql
Enter password:
[root@www ~]# mysql -u root -p
Enter password:
…… //省略部分内容
mysql> USE test;
Database changed
mysql> SHOW TABLES;
+----------------+
| Tables_in_test |
+----------------+
| user |
+----------------+
1 row in set (0.01 sec)
若备份文件中已经包括完整的库信息,则执行导入操作时无须指定库名。
例子:执行以下操作可以从备份文件auth.sql恢复auth库。
[root@crushlinux~]#cd /usr/local/mysql/data/
[root@crushlinuxdata]#mv /auth /tmp/ #转移auth库,模拟故障
[root@crushlinuxdata]#ls –ld auth
[root@crushlinuxdata]#mysql –u root –p < ~/auth.sql 执行导入恢复操作
Enter password:
[root@crushlinuxdata]#ls –ld auth 确认恢复后的结果
MySQL通配符:
_:任意单个字符
%:任意长度的任意字符
用于显示广泛的服务器状态信息
show status;
显示创建特定数据库或表
help create database;
help create tables;
显示授权用户的安全权限
show grants;
显示服务器错误或警告信息
show errors;
show warnings;
显示当前连接用户
mysql> select user();
显示当前时间
mysql> select now();
显示当前用户及时间
mysql> select CURRENT_USER(),CURRENT_TIMESTAMP;
mysql> select user(),now();
显示当前数据库
mysql> select database();
显示服务器状态
mysql> status;