本文旨在复习MariaDB二进制安装以及基本管理mysql
基础知识linux
一、MariaDB是MySQL原做者新做,开源社区维护,功能特性相较MySQL至少持平;web
二、采用新引擎XtraDB替代MySQL的InnoDB,较早版本5.1上的MySQL默认存储引擎是MyISAM;sql
三、Xtradb在多核CPU上面的性能和伸缩性要更好;对于内存的分配和使用也要更好;也解除了InnoDB的不少限制;提供了比InnoDB更多的配置和性能监控参数。数据库
四、数据库备份常有冷备、温备、热备,M有ISAM是不支持热备的,应该被淘汰了。windows
五、最新版本分为5.10和5.5这2个大版本,本次实验环境采用5.5.46安全
通用二进制安装bash
MariaDB有3种安装方式,rpm包、编译、通用二进制安装网络
1. RPM安装:适合小环境,核心功能都具有,快速搭建环境;
ide
2. 编译安装:比较推荐,复杂要求高,要有编译环境,可指定几乎全部选项;
3. 通用二进制安装:最推荐的方式,预先编译过的,既避免了编译的麻烦,又提供加强功能。
步骤1.下载二进制包,可根据自身平台选择
因为我事先在windows中下载好了,这里以共享的方式进行了挂载
mount -t cifs -o username=lance,password=rainbow //192.168.1.106/web /tmp/share cp /tmp/share/mariadb-5.5.46-linux-x86_64.tar.gz /usr/local
步骤2.解压安装MariaDB到/usr/local路径,并重命名为mysql
cd /usr/local tar -zxvf mariadb-5.5.46-linux-x86_64.tar.gz mv mariadb-5.5.46-linux-x86_64 mysql
步骤3.添加用户和组[让MySQL以mysql身份运行,避免安全风险]
groupadd mysql useradd -g mysql mysql
步骤4.修改Mysql目录的属主、属组,各级都递归[由于mysql运行时如建立数据库等必须等工做目录、数据库目录进行读写操做,因此必须确保拥有权限]
chown -R mysql:mysql /usr/local/mysql
步骤5.MariaDB的基本安装已经完成,接下来须要修改配置文件、初始化
建立配置文件
cp -a /usr/local/mysql/support-files/my-small.cnf /etc/my.cnf cp: overwrite `/etc/my.cnf'? y
修改配置文件
vi /etc/my.cnf
在此处根据需求还能够进行必定修改,如字符集设置、日志文件设置、binlog文件设置等
请注意:datadir指定的数据库目录是否须要提早建立呢?
不建议提早建立,由于数据库初始化的时候会以mysql用户身份去建立,从此数据库的操做也会同步读写到此目录,而若以root身份提早建立了该目录,可能因为权限问题致使mysql没法正常工做,切记!
步骤7.初始化MariaDB运行
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/mysql_data
步骤8.添加到开机启动项
cp -a /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld chkconfig --add mysqld chkconfig --level 2345 mysqld on
步骤9.启动并测试连接
service mysqld start
注意:此时输入mysql可能没法链接,这是由于当前环境变量路径中找不到mysql
echo "export PATH=/usr/local/mysql/bin:$PATH">>/etc/profile source /etc/profile
数据库基本操做
建立数据库
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_specification] ... create_specification: [DEFAULT] CHARACTER SET [=] charset_name | [DEFAULT] COLLATE [=] collation_name
删除数据库
DROP {DATABASE | SCHEMA} [IF EXISTS] db_name
修改数据库
ALTER {DATABASE | SCHEMA} [db_name] alter_specification ... ALTER {DATABASE | SCHEMA} db_name UPGRADE DATA DIRECTORY NAME alter_specification: [DEFAULT] CHARACTER SET [=] charset_name | [DEFAULT] COLLATE [=] collation_name
除此之外,经过SHOW命令能够查看一些数据库的公共属性,总结以下:
SHOW DATABASES; --->查看数据库列表; SHOW CREATE DATABASE db_name; --->查看指定数据库的详细信息; SHOW CHARACTER SET; --->查看MariaDB支持的字符集; SHOW COLLATION; --->查看支持的字符集及默认排序规则; SHOW VARIABLES; --->查看MariaDB全局变量; HELP SHOW ; --->更多的信息可使用SHOW来查看;
例1:建立一个名为lance的数据库,若是不存在则建立,建立完成后,修改数据库字符集为GB2312
CREATE DATABASE IF NOT EXISTS lance; SHOW CHARSET; ALTER DATABASE lance CHARACTER SET=gb2312;
表管理
建立表
CREATE TABLE [IF NOT EXISTS] tbl_name (col1 type1 dec1, col2 type2 dec2, ...)
删除表
DROP TABLE
修改表
ALTER [ONLINE | OFFLINE] [IGNORE] TABLE tbl_name [alter_specification [, alter_specification] ...] [partition_options]
查看表的基本结构
DESC tbl_name SHOW [FULL] TABLES [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr]
例2:使用刚才的lance数据库,建立一个表userinfo,要求以下
用户ID | userid,INT,自增,主键 |
姓名 | username,定长,20 |
QQ号 | qq,INT,12 |
mail,varchar(20) |
use lance; CREATE TABLE userinfo (userid INT UNSIGNED NOT NULL PRIMARY KEY,username CHAR(30) NOT NULL,qq INT UNSIGNED,mail VARCHAR(20));
索引管理
建立索引
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name ON tbl_name (index_col_name,...)
删除索引
DROP INDEX index_name ON tbl_name
查看索引
SHOW INDEX FROM db_name.table_name
例3:在建立表userinfo的时候,字段userid指明了PRIMARY KEY,其实就是一种惟一键索引,这里咱们再建立一个QQ号字段的索引,索引名为qq;
CREATE UNIQUE INDEX qq ON userinfo(qq);
用户管理
值得一提的是,MariaDB和MySQL的登录机制很特殊,帐号验证有2部分组成:身份信息+登录主机,即咱们常见的'username'@'host' 这意味着输入了正确的帐号密码未必能成功登录,必须在合法受权的主机上才能够登录。
此处,为root设置密码后,我使用ip地址来链接登录,一探究竟;
显然即使咱们输入了正确的用户名密码,使用不一样的链接主机也不必定能成功对吗?这就涉及到接下来的用户及权限管理问题了。
用户帐号: 'username'@'host'
host可以使用IP、网络地址、使用通配符(_和%);
建立用户帐号,并赋予密码
CREATE USER 'username'@'host' IDENTIFIED BY [PASSWORD] 'password';
删除用户
DROP USER 'username'@'host';
查看用户
SELECT host,user FROM mysql.user;
权限管理
用户链接进数据库后,并不意味着他拥有全部库的任何权限,这些权限是能够细分的,好比A用户对A库有所有权限,B用户对A库只有只读权限,等等,这就牵扯到受权、回收机制了。
也能够受权给函数等等,若是用户事先不存在,则建立此帐号并受权;
ALL [PRIVILEGES]:全部权限
受权:
GRANT priv1,... ON db_name.tbl_name TO 'username'@'host' [IDENTIFIED BY [PASSWORD] 'password'];
查看用户已经得到的受权
SHOW GRANTS [FOR user]
收回受权
REVOKE priv1,... ON db_name.tbl_name FROM 'username'@'host';
例4:建立一个用户,容许来自任何地方的链接,可是仅对数据库lance有所有权限,对于其余的数据库无权限
CREATE USER 'onlylance'@'%' IDENTIFIED BY [PASSWORD] 'zxczxc'; GRANT ALL ON lance.* TO 'onlylance'@'%';