|
一、mariadb的二进制安装:
1
2
3
4
| [iyunv@www ~]# tar -xf mariadb-5.5.46-linux-x86_64.tar.gz -C /usr/local/
[iyunv@www local]# ln -s mariadb-5.5.46-linux-x86_64/ mysql
[iyunv@www local]# ls
mariadb-5.5.46-linux-x86_64 mysql //最好软链接成mysql
|
1、先创建mysql系统用户,mysql组,让mysql系统用户去运行mysql,保证安全性:
1
2
| [iyunv@www /]# groupadd mysql
[iyunv@www /]# useradd -r mysql
|
2、把mysql目录下的文件和目录都设置为属主root,属组mysql:
1
| [iyunv@www mysql]# chown -R root:mysql ./*
|
3、创建mysql存储数据的目录,并把属主和属组:
1
2
3
4
| [iyunv@www mysql]# mkdir -p /data/mydata
[iyunv@www mysql]# chown -R mysql:mysql /data/mydata/
[iyunv@www mysql]# ll -d /data/mydata/
drwxr-xr-x. 2 mysql mysql 4096 Apr 17 08:24 /data/mydata/
|
4、根据自己服务器的配置选择配置文件:
my-huge.cnf : 用于高端产品服务器,包括1到2GB RAM,主要运行mysql
my-innodb-heavy-4G.ini : 用于只有innodb的安装,最多有4GB RAM,支持大的查询和低流量
my-large.cnf : 用于中等规模的产品服务器,包括大约512M RAM
my-medium.cnf : 用于低端产品服务器,包括很少内存(少于128M)
my-small.cnf : 用于最低设备的服务器,只有一点内存(少于512M)
1
2
3
4
5
6
| [iyunv@www support-files]# cp my-large.cnf /etc/my.cnf
[iyunv@www support-files]# vim /etc/my.cnf
[mysqld] //在mysqld这里添加三句话
datadir = /data/mydata //存储数据目录
skip_name_resolve = ON //禁止反解主机名
innodb_file_per_table = ON //修改InnoDB为独立表空间模式
|
5、复制mysql.server到/etc/init.d/目录下:
1
2
| [iyunv@www support-files]# cp mysql.server /etc/init.d/mysqld
[iyunv@www support-files]# chkconfig --add mysqld
|
6、对数据库进行初始化安装:
1
2
3
| [iyunv@www scripts]# /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/data/mydata --basedir=/usr/local/mysql
[iyunv@www scripts]# service mysqld start
Starting MySQL.. SUCCESS!
|
7、对数据库进行安全加固,数据库默认密码都是为空,删除test的数据库:
1
2
3
4
5
6
7
8
9
10
11
12
| [iyunv@www scripts]# /usr/local/mysql/bin/mysql_secure_installation
Enter current password for root (enter for none): //直接回车,因为密码为空
Set root password? [Y/n] y //设置新密码
New password:
Remove anonymous users? [Y/n] y //删除其他没用的用户
... Success!
Disallow root login remotely? [Y/n] n //禁止远程登录mysql,建议禁止
... skipping
Remove test database and access to it? [Y/n] y //是否删除测试数据库
- Dropping test database...
Reload privilege tables now? [Y/n] y //是否重新加载权限列表
... Success!
|
到此Mariadb二进制安装完成,可以使用mysql数据库了:
1
2
3
4
5
6
7
8
9
10
| [iyunv@www bin]# mysql -uroot -p123456
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 11
Server version: 5.5.46-MariaDB-log MariaDB Server
Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
|
二、mysql的基本命令:
1、用户的创建及授权:
用户账号:‘username'@'host'
host:此用户访问当前mysql服务器时,允许其通过哪些主机远程创建连接
表示方式:IP,网络地址、主机名、通配符(%和_);
172.18.1.1. 172.18.0.0/24 www.magedu.com 172.18.%.%
创建用户账号: //只有查看的权限
CREATE USER 'username'@'host' IDENTIFIED BY ‘passwd’
1
2
| MariaDB [(none)]> create user 'testusr'@'localhost';
Query OK, 0 rows affected (0.00 sec)
|
删除用户账号:
DROP USER 'user'@'host'[,user@host]....
1
2
| MariaDB [(none)]> drop user 'testusr'@'localhost';
Query OK, 0 rows affected (0.00 sec)
|
给用户授权:
权限级别:管理权限、数据库、表、字段、存储历程;
GRANT priv_tyep,...ON [object_type] db_name.tbl_name TO 'user'@'host' [IDENTIFIED BY 'passwd'] ;
priv_tyep : select、insert、delete、update、atler、drop、create或者all
db_name.tbl_name: //可以对表限制
*.*:所有库的所有表
db_name.*:指定库的所有表
db_name.tbl_name:指定库的特定表
db_name.routine_name:指定库上的存储过程或存储函数
1
2
| MariaDB [mytest]> grant select on mytest.students to 'testusr'@'localhost';
Query OK, 0 rows affected (0.14 sec) //如果前面创建了用户,那这里不同给密码
|
取消用户授权:
REVOKE priv_type,..ON db_name FROM 'username'@'host';
1
2
| MariaDB [mytest]> revoke select on mytest.students from 'testusr'@'localhost';
Query OK, 0 rows affected (0.00 sec)
|
查看用户所获得的权限:
show grants for 'user'@'host';
show grants for current_user; //查看当前用户的权限
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| MariaDB [mytest]> show grants for 'testusr'@'localhost';
+---------------------------------------------+
| Grants for testusr@localhost |
+---------------------------------------------+
| GRANT USAGE ON *.* TO 'testusr'@'localhost' |
+---------------------------------------------+
1 row in set (0.00 sec)
MariaDB [mytest]> show grants for current_user;
+----------------------------------------------------------------------------------------------------------------------------------------+
| Grants for root@localhost |
+----------------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
+----------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
|
注意:MariaDB服务进程启动时,会读取mysql库的所有授权表至内存中;
1、GRANT或REVOKE命令等执行的权限操作会保存于表中,MariaDB此时一般会自动重读授权表,权限修改会立即生效
2、其它方式实现的权限修改,要想生效,必须手动运行FLUSH PRIVILEGES命令方可
mysql的命令分为两种,客户端命令和服务端命令:
客户端命令:
\use \u db_name:设定哪个库为默认数据库
\exit \q:退出
\delimiter \d CHAR:设定新的语句结束符
\go \g:语句结束标记
\ego \G: 语句结束标记,结果竖排方式显示;
\status \s: 显示客户端信息
\clear \c:取消语句执行,相当于CRTRL +C
服务端命令:
DDL: 数据定义语言,主要用于管理数据组件,例如表、索引、视图、用户、存储过程
create、drop、alter
DDM: 数据操纵语言,主要用管理表中的数据,实现数据的增、删、改、查
insert、delete、select、update
DCL: 用户权限
grant、reovke
注意:每个语句结束符都必须要有语句结束符,默认为(;)。
数据库数据都是有类型的:
字符型:
定长字符型: 最大不超过255字符
char(#) : 不区分字符大小写 以下 # 都代表数字
binary(#) : 区分字符大小写
变长字符型: 最大好像是6W个字符
varchar(#) 和 varbinary(#):
对象存储:
text和 blob(布尔型)
内置类型:
set 和 enum(枚举) :限定选择哪些类型
数值型:
精确数值型:int 、bigint、smallint、tinyint
近似数值型:float和dobule
数据类型有修饰符:
UNSIGNED:无符号 要紧跟在数值型后面,不然会报错
NOT NULL:非空
DEFAULT value:默认值
1、数据库的管理:创建、删除、和修改
创建:CREATE { DATABASE | SCHEMA } db_name ;
1
2
| MariaDB [(none)]> create database mytest;
Query OK, 1 row affected (0.01 sec)
|
也可以在后面跟上语句设置字符集合排序规则,不写表示默认:
[DEFAULT] CHARACTER SET [=] charset_name //设定字符集
[DEFAULT] COLLATE [=] colation_name //设定排序规则
查看支持的所有字符集:SHOW CHARACTER SET
查看支持的所有排序的字符集: SHOW COLLATION
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
| MariaDB [mytest]> status; //查看创建数据库的信息
--------------
mysql Ver 15.1 Distrib 5.5.46-MariaDB, for Linux (x86_64) using readline 5.1
Connection id: 11
Current database: mytest
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server: MariaDB
Server version: 5.5.46-MariaDB-log MariaDB Server
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /tmp/mysql.sock
Uptime: 1 hour 21 min 59 sec
Threads: 1 Questions: 70 Slow queries: 0 Opens: 6 Flush tables: 2 Open tables: 32 Queries per second avg: 0.014
--------------
|
修改:ALTER {DATABASE | SCHEMA } [db_name]
[DEFAULT] CHARACTER SET [=] charset_name
[DEFAULT] COLLATE [=] colation_name
1
2
| MariaDB [mytest]> alter database mytest character set = cp932;
Query OK, 1 row affected (0.00 sec)
|
删除:DROP {DATABASE | SCHEMA } db_name
1
2
| MariaDB [mytest]> drop database mytest;
Query OK, 1 row affected (0.37 sec)
|
2、表的管理:创建、修改、删除
创建: CREATE TABLE [IF NOT EXISTS] tbl_name (create_definition) [table_options]
(create_definition:)
字段:col_name data_type
键:
PRIMARY KEY(col1,col2,..) 主键
UNIQUE KEY(col1,col2...) 唯一键
FOREIGN KEY(column) 外键
(table_options:)
ENGINE[=]engine_name :指明存储引擎
查看数据库支持的所有存储引擎类型:
mysql>SHOW ENGINES;
查看某表的存储引擎类型:
mysql>SHOW TABLES STATUS [LIKE 'tbl_name']
示例:创建一张表,包含ID号,姓名,年龄,性别,身份证号,把ID和名称设为主键,身份证号设置为唯一键
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| MariaDB [mytest]>create table students(id int unsigned not null,name char(30) not null,age tinyint unsigned,userID bigint,gender enum("w","m"),primary key(id,name),unique key(userID));
Query OK, 0 rows affected (7.48 sec)
MariaDB [mytest]> desc students;
+--------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------------+------+-----+---------+-------+
| id | int(10) unsigned | NO | PRI | NULL | |
| name | char(30) | NO | PRI | NULL | |
| age | tinyint(3) unsigned | YES | | NULL | |
| userID | bigint(20) | YES | UNI | NULL | |
| gender | enum('w','m') | YES | | NULL | |
+--------+---------------------+------+-----+---------+-------+
5 rows in set (0.00 sec)
|
修改: ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name [alter_specification]
alter_specification:
字段:
添加:ADD [COLUMN] col_name data_type [FIRST |AFTER col_name]
删除:DROP [COLUMN] col_name
修改:
改名字:CHANGE [COLUMN] old_col_name new_col_name column_definition [FIRST|AFTER col_name]
改属性:MODIFY [COLUMN] col_name column_definition [FIRST | AFTER col_name]
示例:在name后面添加一个班级,修改属性,最后删除这个字段;
1
2
3
4
5
6
7
8
9
10
11
| MariaDB [mytest]> alter table students add class varchar(100) not null after name;
Query OK, 0 rows affected (0.27 sec)
Records: 0 Duplicates: 0 Warnings: 0
MariaDB [mytest]> alter table students modify class varchar(50) after name;
Query OK, 0 rows affected (0.16 sec)
Records: 0 Duplicates: 0 Warnings: 0
MariaDB [mytest]> alter table students drop class;
Query OK, 0 rows affected (0.12 sec)
Records: 0 Duplicates: 0 Warnings: 0
|
键:
添加:ADD {PRIMARY |UNIQUE|FOREIGN} KEY (col1,col2,...)
删除:DROP PRIMARY KEY 删除主键
DROP FOREIHN KEY fk_symbol
1
2
3
4
5
6
7
| MariaDB [mytest]> alter table students add unique key(age);
Query OK, 0 rows affected (0.63 sec)
Records: 0 Duplicates: 0 Warnings: 0
MariaDB [mytest]> alter table students drop primary key;
Query OK, 0 rows affected (0.22 sec)
Records: 0 Duplicates: 0 Warnings: 0
|
索引:
添加: ADD {INDEX|KEY} [index_name](col1,col2..)
删除: DROP {index|key} index_name
1
2
3
4
5
6
7
8
9
10
11
| MariaDB [mytest]> alter table students add index ssalc(class);
Query OK, 0 rows affected (0.30 sec)
Records: 0 Duplicates: 0 Warnings: 0
MariaDB [mytest]> show index from students;
| Table | Non_unique | Key_name
| students | 1 | ssalc
MariaDB [mytest]> alter table students drop index ssalc;
Query OK, 0 rows affected (0.08 sec)
Records: 0 Duplicates: 0 Warnings: 0
|
删除表: DROP TABLE [IF EXISTS] tbl_name;
3、索引的管理:创建和删除
创建: CREATE [UNIQUE|FULLTEXT|SPATAL] INDEX index_name [BTREE|HASH] ON tbl_name (Col1,col2...)
删除: DROP INDEX index_name ON tbl_name
1
2
3
4
5
6
7
| MariaDB [mytest]> create index class_and_name on students(class,name);
Query OK, 0 rows affected (0.12 sec)
Records: 0 Duplicates: 0 Warnings: 0
MariaDB [mytest]> create index class_and_name on students(class,name);
Query OK, 0 rows affected (0.09 sec)
Records: 0 Duplicates: 0 Warnings: 0
|
4、对表的数据进行管理:insert、delete、update、select
INSERY INTO: 添加语句
INSERT [INTO] tbl_name [(col1,..)] {VALUES|VALUE}(val1,...),(...)
1
2
| MariaDB [mytest]> insert into students(id,name,age) values (1,'xiao ming',24);
Query OK, 1 row affected, 1 warning (0.09 sec)
|
注意:
字符型:引号 ' ' 'xiao ming'
数值型:不能用引号 ' ' 74
SELECT: 查询语句
1、SELECT * FROM tbl_name; 查看表中的所有字段
2、SELECT col1,col2,......FROM tbl_name; 挑选表中的字段查看
3、SELECT col1,.....FROM tbl_name WHERE clause; 根据where clause条件查看字段
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| MariaDB [mytest]> select * from students;
+----+-----------+------+--------+--------+-------+
| id | name | age | userID | gender | class |
+----+-----------+------+--------+--------+-------+
| 1 | xiao ming | 24 | NULL | NULL | |
+----+-----------+------+--------+--------+-------+
1 row in set (0.04 sec)
MariaDB [mytest]> select id,name from students;
+----+-----------+
| id | name |
+----+-----------+
| 1 | xiao ming |
+----+-----------+
2 rows in set (0.00 sec)
|
WHERE clause:用于指明挑选条件
col_name 操作符 value ;
比如:age > 30 ;
操作符有:
比较条件:>,<,>=,<=,==
组合条件:and or not
大于等于和小于等于: BETWEEN....AND.....
通配符:
LIKE 'PAT'
%:任意长度的任意字符
_: 任意单个字符
正则表达式: RLIKE 'PAT'
数据为空: is null //age is null
数据不为空:is not null //age is not null
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| MariaDB [mytest]> select * from students where age > 22;
+----+-----------+------+--------+--------+------------+
| id | name | age | userID | gender | class |
+----+-----------+------+--------+--------+------------+
| 2 | xiao ming | 23 | NULL | NULL | yi nian ji |
| 3 | xiao hong | 24 | NULL | NULL | yi nian ji |
| 4 | xiao tian | 25 | NULL | NULL | yi nian ji |
+----+-----------+------+--------+--------+------------+
3 rows in set (0.09 sec)
MariaDB [mytest]> select * from students where gender is not null;
+----+---------+------+--------+--------+------------+
| id | name | age | userID | gender | class |
+----+---------+------+--------+--------+------------+
| 5 | xiao li | 26 | NULL | w | er nian ji |
+----+---------+------+--------+--------+------------+
1 row in set (0.00 sec)
MariaDB [mytest]> select * from students where name rlike 'ng$';
+----+-----------+------+--------+--------+------------+
| id | name | age | userID | gender | class |
+----+-----------+------+--------+--------+------------+
| 1 | xiao wang | 22 | NULL | NULL | yi nian ji |
| 2 | xiao ming | 23 | NULL | NULL | yi nian ji |
| 3 | xiao hong | 24 | NULL | NULL | yi nian ji |
+----+-----------+------+--------+--------+------------+
3 rows in set (0.06 sec)
|
4、对数据进行排序:
SELECT col1,...FROM tbl_name [WHERE clause] ORDER BY col_name,col_name2 [ASC|DESC]
ASC:升序
DESC:降序
1
2
3
4
5
6
7
8
9
10
11
| MariaDB [mytest]> select * from students order by id desc;
+----+-----------+------+--------+--------+------------+
| id | name | age | userID | gender | class |
+----+-----------+------+--------+--------+------------+
| 5 | xiao li | 26 | NULL | w | er nian ji |
| 4 | xiao tian | 25 | NULL | NULL | yi nian ji |
| 3 | xiao hong | 24 | NULL | NULL | yi nian ji |
| 2 | xiao ming | 23 | NULL | NULL | yi nian ji |
| 1 | xiao wang | 22 | NULL | NULL | yi nian ji |
+----+-----------+------+--------+--------+------------+
5 rows in set (0.04 sec)
|
delete:按行进行删除
1、DELETE FROM tbl_name [WHERE where_conditin]
2、DELETE FROM tbl_name [ORDER BY ..] [LIMIT row_count]
1
2
3
4
5
| MariaDB [mytest]> delete from students where gender is not null;
Query OK, 1 row affected (0.13 sec)
MariaDB [mytest]> delete from students order by id desc limit 2;
Query OK, 2 rows affected (0.04 sec) //把最大两个ID删除
|
update:对数据进行修改
UPDATE table_reference SET col_name1=value1 [, col_name2=value2] ...[WHERE where_condition] [ORDER BY ...] [LIMIT row_count]
1
2
3
| MariaDB [mytest]> update students set age=age-10 where id >1;
Query OK, 2 rows affected (0.05 sec)
Rows matched: 2 Changed: 2 Warnings: 0
|
1
2
3
| MariaDB [mytest]> update students set age=age+10 order by age desc limit 2;
Query OK, 2 rows affected (0.05 sec)
Rows matched: 2 Changed: 2 Warnings: 0
|
|
|