一点扩展:
在2008年1月16号MySQL被Sun公司收购。MySQL的创始人Michael “Monty” Widenius也弄出MariaDB(MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品)来对抗MySQL。Oracle为了消灭竞争对手,一般都采取收购的策略。mysql和sun后来也被oracle收购了。如今,mysql分为社区版和企业版,社区版是不稳定的版本,不由mysql提供服务保障,企业版稳定,功能强大,但是需要花钱购买。
由于mysql被收购后,版本更新速度变慢,核心开发团队封闭等特点,使得各个大公司,都开发了自己定制的MySQL版本,包括Yahoo!/Facebook/Google/阿里巴巴等。
基本知识
mysql存储引擎(表类型):
主要分为两种,一种是MyISAM(5.0前默认引擎,包含.frm:表结构定义文件.MYD:表数据和.MYI:索引)。插入查询速度快,但是不支持事务和外键,使用表锁。另一种是InnoDB(5.5后默认引擎,包含.frm表空间和.idb表空间(数据和索引)),支持ACID和行级锁定。
MySQL依赖的配置文件(mysql在启动的时候会去找这些配置文件):
/etc/my.cnf
/etc/mysql/my.cnf
$MYSQL_HOME/my.cnf
~/.my.cnf
配置文件中最重要的一个属性是datadir = /mydata/data,定义数据的存放目录。
数据库语言:
DDL:数据库模式定义语言,关键字:create
DML:数据操纵语言,关键字:Insert、delete、update
DCL:数据库控制语言,关键字:grant、remove
DQL:数据库查询语言,关键字:select
安装:
在centos6.5下默认是不安装mysql的,但我们可以使用方便的命令安装。
yum install mysql-server----------------------如果使用yuminstall mysql是无法启动mysql服务和登入mysql数据库的。
登入数据库:
mysql-------默认方式登入到数据库。默认的用户名是root,密码是空。
完整命令格式
mysql -h hostname -u username-p password --port --protocol
查看mysql支持的数据库引擎:
mysql> show engines
-> ;
+------------+---------+------------------------------------------------------------+--------------+------+------------+
| Engine | Support |Comment | Transactions | XA | Savepoints|
+------------+---------+------------------------------------------------------------+--------------+------+------------+
| MRG_MYISAM | YES |Collection of identical MyISAM tables | NO | NO | NO |
| CSV | YES | CSV storage engine |NO | NO | NO |
| MyISAM | DEFAULT |Default engine as of MySQL 3.23 with great performance | NO | NO | NO |
| InnoDB | YES | Supports transactions, row-levellocking, and foreign keys | YES | YES | YES |
| MEMORY | YES | Hash based, stored in memory, useful fortemporary tables | NO | NO | NO |
+------------+---------+------------------------------------------------------------+--------------+------+------------+
5 rows in set (0.02 sec)
支持五中引擎,常用两种,MyISAM和InnoDB。
mysql> show databases
-> ;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
+--------------------+
3 rows in set (0.00 sec)
第一个数据库INFORMATION_SCHEMA:提供了访问数据库元数据的方式。
第二个数据库mysql:这个是mysql的核心数据库,类似于sqlserver中的master表,主要负责存储数据库的用户、权限设置、关键字等mysql自己需要使用的控制和管理信息。不可以删除。
第三个数据库是test:这个是安装时候创建的一个测试数据库,和它的名字一样,是一个完全的空数据库,没有任何表,可以删除。
show命令:
1、show character set 支持字符集
创建数据库时指定字符集
create database|schemaif not exists studentsdb character set 'gbk' collate 'gbk_chinese_ci‘
2、show collation 支持排序规则和字符集
3、show global variables全局变量
创建一个数据库:
mysql> create database mydb;
Query OK, 1 row affected (0.08 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mydb |
| mysql |
| test |
+--------------------+
4 rows in set (0.05 sec)
进入数据库,查看某个表的信息:
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
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 |
| servers |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
23 rows in set (0.00 sec)
mysql> describe user;
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Field |Type | Null| Key | Default | Extra |
+-----------------------+-----------------------------------+------+-----+---------+-------+
| Host |char(60) |NO | PRI | | |
| User |char(16) |NO | PRI | | |
| Password | char(41) | NO | | | |
| Select_priv |enum('N','Y') |NO | | N | |
| Insert_priv |enum('N','Y') |NO | | N | |
| Update_priv |enum('N','Y') |NO | | N | |
| Delete_priv |enum('N','Y') |NO | | N | |
| Create_priv |enum('N','Y') |NO | | N | |
| Drop_priv |enum('N','Y') |NO | | N | |
| Reload_priv |enum('N','Y') |NO | | N | |
| Shutdown_priv |enum('N','Y') |NO | | N | |
| Process_priv |enum('N','Y') |NO | | N | |
| File_priv |enum('N','Y') |NO | | N | |
| Grant_priv |enum('N','Y') |NO | | N | |
| References_priv |enum('N','Y') |NO | | N | |
| Index_priv |enum('N','Y') |NO | | N | |
| Alter_priv |enum('N','Y') |NO | | N | |
| Show_db_priv |enum('N','Y') |NO | | N | |
| Super_priv |enum('N','Y') | NO | | N | |
| Create_tmp_table_priv | enum('N','Y') | NO | | N | |
| Lock_tables_priv |enum('N','Y') |NO | | N | |
| Execute_priv |enum('N','Y') |NO | | N | |
| Repl_slave_priv |enum('N','Y') |NO | | N | |
| Repl_client_priv |enum('N','Y') |NO | | N | |
| Create_view_priv |enum('N','Y') |NO | | N | |
| Show_view_priv |enum('N','Y') |NO | | N | |
| Create_routine_priv |enum('N','Y') |NO | | N | |
| Alter_routine_priv |enum('N','Y') |NO | | N | |
| Create_user_priv |enum('N','Y') |NO | | N | |
| Event_priv |enum('N','Y') | NO | | N | |
| Trigger_priv |enum('N','Y') |NO | | N | |
| ssl_type |enum('','ANY','X509','SPECIFIED') | NO | | | |
| ssl_cipher |blob |NO | | NULL | |
| x509_issuer |blob |NO | | NULL | |
| x509_subject |blob |NO | | NULL | |
| max_questions |int(11) unsigned |NO | | 0 | |
| max_updates |int(11) unsigned |NO | | 0 | |
| max_connections |int(11) unsigned |NO | | 0 | |
| max_user_connections |int(11) unsigned |NO | | 0 | |
+-----------------------+-----------------------------------+------+-----+---------+-------+
39 rows in set (0.00 sec)
user表非常重要,这里面存储了登陆用户的信息和权限等等。可以查看表中的数据。
mysql> select Host,User,Password from user;
+-----------+------+----------+
| Host | User | Password|
+-----------+------+----------+
| localhost | root | |
| slave-01 | root | |
| 127.0.0.1 | root | |
| localhost | | |
| slave-01 | | |
+-----------+------+----------+
5 rows in set (0.00 sec)
MySQL默认用户root3个,2个匿名。默认都是空密码的,这样是不安全的。
修改密码:
mysql> update user set Password=PASSWORD('redhat') whereHost='localhost';
Query OK, 2 rows affected (0.11 sec)
Rows matched: 2 Changed:2 Warnings: 0
mysql> select Host,User,Password from user;
+-----------+------+-------------------------------------------+
| Host | User |Password |
+-----------+------+-------------------------------------------+
| localhost | root | *84BB5DF4823DA319BBF86C99624479A198E6EEE9 |
| slave-01 | root | |
| 127.0.0.1 | root | |
| localhost | |*84BB5DF4823DA319BBF86C99624479A198E6EEE9 |
| slave-01 | | |
+-----------+------+-------------------------------------------+
5 rows in set (0.00 sec)
如果使用exit再进入,直接输入mysql,还是可以进去,输入mysql-uroot -hlocalhost -p 回车,输入redhat,进不去......这是因为,需要重新启动才可以生效的啊。
service mysqld restart
再输入mysql就进不去了,输入mysql-hlocalhost -uroot -predhat 就可以进去了。如果添加用户名和密码直接使用insert 命令就可以了。
需要注意的是修改后的密码是加密的,必须要加密,数据库登陆默认就是比对加密后的密码,如果不加密直接存到数据库,就登不进去了。所以直接修改user表的时候一定要注意!
这种修改太麻烦了,容易出错,我们可以在登陆mysql前使用mysqladmin修改密码,此时我们的命令具有mysql的admin的权限。
[root@slave-01 ~]# mysqladmin -uroot-predhat password centos
[root@slave-01 ~]# mysql -hlocalhost -uroot -predhat
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (usingpassword: YES)
[root@slave-01 ~]#
[root@slave-01 ~]# mysql -hlocalhost -uroot -pcentos
第三种修改方式是刚进入mysql时修改
mysql> SET PASSWORD FOR 'root'@'localhost'=PASSWORD('redhat')
-> ;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
[root@slave-01 ~]# mysql -hlocalhost -uroot -pcentos
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (usingpassword: YES)
[root@slave-01 ~]# mysql-hlocalhost -uroot -predhat
如果密码忘了的话,找回管理员密码
1stop service
2vim /etc/init.d/mysql 加入--skip-grant-tables--skip-networking,启动服务后,可以不用密码登录。
3set password for 'user@host'identified by 'password'不可以这么改
3只能通过update user set 。。。。。。。。。。。