Mysql数据库系统

时间:2021-05-19 19:47:37

概述:

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)

如下图表示编译完成

Mysql数据库系统

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/

 

Mysql数据库系统

初始化完成!

如果报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>”操作环境--exitquitctrl+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;

Mysql数据库系统

 

 

 

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;