MariaDB初识

MYSQL

一.数据库基础

1.传统的文件系统管理的缺陷

编写应用程序不方便;
数据冗余不可避免;
应用程序依赖性;
不支持对文件的并发访问;
数据间联系弱;
难以按用户视图表示数据;
无阶段性安全控制功能.

2.数据库管理系统的优点

相互关联的数据的集合;
较少的数据冗余;
程序与数据相互独立;
保证数据的安全、可靠;
最大限度地保证数据的正确性;
数据可以并发使用并能同时保证一致性.

3.数据库管理系统

数据库是数据的汇集,它以一定的组织形式存于存储介质上
DBMS是管理数据库的系统软件,它实现数据库系统的各种功能。是数据库系统的核心
DBA:负责数据库的规划、设计、协调、维护和管理等工作
应用程序指以数据库为基础的应用程序;

单机架构;
大型主机/终端架构;
主从分布式(C/S); MYSQL,ORICAL
分布式架构;

4.关系型数据Key/Value

数据库
关系 :关系就是二维表。并满足如下性质:
表中的行、列次序并不重要
行row:表中的每一行,又称为一条记录(record)
列column:表中的每一列,称为属性,字段
主键(Primary key):用于惟一确定一个记录的字段
域domain:属性的取值范围,如,性别只能是‘男’和‘女’两个值
外键(Foreign key):用于表之间的一对多的关系
唯一键(Uniq key):可以为null,
非关系型数据库:NO SQL (not only SQL)
mencached redis mogoDB
RDBMS
MySQL: MySQL, MariaDB, Percona Server
PostgreSQL: 简称为pgsql,EnterpriseDB
Oracle:
MSSQL:
DB2:
事务tansaction:多个操作被当作一个整体对待
ACID:
A:原子性
C:一致性
I:隔离性
D:持久性
事务未撤销,形成的数据为:dirty data

5.数据三要素

数据结构:

​ 一类是与数据类型、内容、性质有关的对象,比如关系模型中的域、属性和关系等;
另一类是与数据之间联系有关的对象,它从数据组织层表达数据记录与字段的结构

数据的操作

​ 数据提取:在数据集合中提取感兴趣的内容。SELECT
数据更新:变更数据库中的数据。INSERT、DELETE、UPDATE

数据的约束条件
是一组完整性规则的集合:

​ 实体(行)完整性 Entity integrity
域(列)完整性 Domain Integrity
参考完整性 Referential Integrity

6.数据库的正规化分析

RDMBS设计范式基础概念---物理层

​ 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同范式,各种范式呈递次规范,越高的范式数据库冗余越小

目前关系数据库有六种范式:---逻辑层

​ 第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般说来,数据库只需满足第三范式(3NF)即可
范式
1NF:无重复的列,每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。除去同类型的字段,就是无重复的列
说明:第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库;

​ 2NF:属性完全依赖于主键,第二范式必须先满足第一范式,要求表中的每个行必须可以被唯一地区分。通常为表加上一个列,以存储各个实例的唯一标识PK,非PK的字段需要与整个PK有直接相关性;

​ 3NF:属性不依赖于其它非主属性,满足第三范式必须先满足第二范式。第三范式要求一个数据库表中不包含已在其它表中已包含的非主关键字信息,非PK的字段间不能有从属关系;
为了性能,某些数据库不满足范式,增加了数据库的冗余.

7.MYSQL概念

历史发展
1979年:TcX公司 Monty Widenius,Unireg
1996年:发布MySQL1.0,Solaris版本,Linux版本
1999年:MySQL AB公司,瑞典
2003年:MySQL 5.0版本,提供视图、存储过程等功能
2008年:Sun 收购
2009年:Oracle收购sun
2009年:Monty成立MariaDB

二.安装MariaDB

yum 安装mariadb,系统光盘带的是5.5

]#yum install mariadb-server -y -q
]#rpm -q --scripts mysql-server #安装前脚本
]#ll /var/lib/mysql/

源码编译安装mariadb-10.2.15

]#yum groupinstall "Development Tools"
]#yum install ncurse-devel openssl-devel -y
]#yum install -y cmake
]#useradd -r  -d /data/mysqldb -s /sbin/nologin mysql
]#mkdir /data/mysqldb -pv
]#chown mysql.mysql /data/mysqldb
]#chmod 770 /data/mysqldb
]#tar -xf mariadb-10.2.15.tar.gz
]#cd mariadb-10.2.15/
]#cmake \
-DCMAKE_INSTALL_PREFIX=/app/mysql \
-DMYSQL_DATADIR=/data/mysqldb/ \
-DSYSCONFDIR=/etc \
-DMYSQL_USER=mysql \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITHOUT_MROONGA_STORAGE_ENGINE=1 \
-DWITH_DEBUG=0 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_UNIX_ADDR=/app/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
]#make -j 3 && make install && for i in {1..5};do echo -e "\a" ;done
]#cd /app/mysql
]#scripts/mysql_install_db  --datadir=/data/mysqldb  --user=mysql  --basedir=/app/mysql
]#cp /app/mysql/support-files/my-huge.cnf /etc/my.cnf
]#vim /etc/my.cnf
[mysqld]
datadir     = /data/mysqldb
]#setfacl -R -m u:mysql:rwx /app/mysql
]#cp /app/mysql/support-files/mysql.server /etc/init.d/mysqld
]#chkconfig --add mysqld
]#service mysqld start

centos7.4二进制安装mariadb-10.2.15

]#useradd -r  -d /data/mysqldb -s /sbin/nologin mysql
]#tar xvf mariadb-10.2.15-linux-x86_64.tar.gz -C /usr/local
]#cd /usr/local
]#ln -s mariadb-10.2.15-linux-x86_64/ mysql
]#chown -R root:root /usr/local/mysql/  #修改文件的所属组
]#ls /usr/local/mysql/bin
]#echo PATH=/usr/local/mysql/bin:$PATH >/etc/profile.d/mysql.sh
]#echo '- - -' > /sys/class/scsi_host/host2/scan
]#lsblk
]#pvcreate /dev/sdb
]#vgcreate vg0 /dev/sdb
]#lvcreate -n lv_mysql -l 100%FREE vg0
]#mkfs.xfs /dev/vg0/lv_mysql
]#vim /etc/fstab    #增加自动挂载
]#mount -a
]#mkdir /data/mysqldb -pv
]#chown mysql.mysql /data/mysqldb
]#chmod 770 /data/mysqldb   #改变权限,更安全
]#cd /usr/local/mysql/
]#setfacl -R -m u:mysql:rwx /usr/local/mysql/
]#scripts/mysql_install_db  --datadir=/data/mysqldb --user=mysql
Installing MariaDB/MySQL system tables in '/data/mysqldb' ...
OK
···  
]#ll /data/mysqldb/ #生成数据库文件
]#cp /etc/my.cnf /etc/my.cnf.bak
]#cp /usr/local/mysql/support-files/my-huge.cnf /etc/my.cnf
]#vim /etc/my.cnf  
[client]
socket=/tmp/mysql.sock
[mysqld]
datadir=/data/mysqldb
socket=/tmp/mysql.sock
]#cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
]#chkconfig --add mysqld
]# service mysqld start
Starting mysqld (via systemctl):                           [  OK  ]
]#mysql_secure_installation #安全加护

启动服务

]#systemctl start mariadb
]#mysql
MariaDB [(none)]>drop database mysqlclone; #删除数据库
MariaDB [(none)]>use mysql;
MariaDB [mysql]> status
MariaDB [mysql]> create database testdb;
Query OK, 1 row affected (0.00 sec)
MariaDB [mysql]> \! ls /var/lib/mysql
MariaDB [mysql]> select user,password,host from user;
]#mysql_secure_installation     #设置mysql密码
]#mysql -uroot -p              #输入密码
MariaDB [mysql]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
MariaDB [mysql]> select user,host,password from user;
MariaDB [mysql]> select * from user\G;
MariaDB [mysql]>quit

交互式命令

可以接受输入重定向。可以source

]#mysql -uroot -proot < test.sql
MariaDB [(none)]> source test.sql

客户端命令

可以不用加";"结束语句

Note that all text commands must be first on line and end with ';'
?         (\?) Synonym for `help'.
clear     (\c) Clear the current input statement.
connect   (\r) Reconnect to the server. Optional arguments are db and host.
delimiter (\d) Set statement delimiter.
edit      (\e) Edit command with $EDITOR.
ego       (\G) Send command to mysql server, display result vertically.
exit      (\q) Exit mysql. Same as quit.
go        (\g) Send command to mysql server.
help      (\h) Display this help.
nopager   (\n) Disable pager, print to stdout.
notee     (\t) Don't write into outfile.
pager     (\P) Set PAGER [to_pager]. Print the query results via PAGER.
print     (\p) Print current command.
prompt    (\R) Change your mysql prompt.
quit      (\q) Quit mysql.
rehash    (\#) Rebuild completion hash.
source    (\.) Execute an SQL script file. Takes a file name as an argument.
status    (\s) Get status information from the server.
system    (\!) Execute a system shell command.
tee       (\T) Set outfile [to_outfile]. Append everything into given outfile.
use       (\u) Use another database. Takes database name as argument.
charset   (\C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets.
warnings  (\W) Show warnings after every statement.
nowarning (\w) Don't show warnings after every statement.

修改环境PS1环境变量

1.shell的环境变量;2.命令行的选项改变mariadb_PS1;3./etc/my.cnf.d/mysql-clients.cnf的文件修改

MariaDB [(none)]> prompt \u@[\D]--->
PROMPT set to '\u@[\D]--->'
root@[Mon Jun  4 23:08:30 2018]--->
]#vim /etc/profile.d/mysql.sh
export MYSQL_PS1="(\u@\h) [\d]> "
]#. /etc/profile.d/mysql.sh
]#mysql --prompt="(\u@\h) [\d]> "
]#vim /etc/my.cnf.d/mysql-clients.cnf 
[mysql]
prompt=(\\u@\\h) [\\d]>\\_

Mysql客户端选项

mysql客户端可用选项:
-A, --no-auto-rehash 禁止补全
-u, --user=  用户名,默认为root
-h, --host=  服务器主机,默认为localhost
-p, --passowrd=  用户密码,建议使用-p,默认为空密码
-P, --port=  服务器端口
-S, --socket= 指定连接socket文件路径
-D, --database= 指定默认数据库
-C, --compress  启用压缩
-e "SQL" 执行SQL命令
-V, --version 显示版本
-v --verbose 显示详细信息
--print-defaults 获取程序默认使用的配置
]#mysql -e "show databases;"
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
+--------------------+

MariaDB多实例实现

]#yum install mariadb-server -y
]#mkdir /mysqldb/{3306,3307,3308}/{etc,socket,pid,log,data} -pv
]#chown -R mysql.mysql /mysqldb/
]#mysql_install_db  --datadir=/mysqldb/3306/data  --user=mysql 
]#mysql_install_db  --datadir=/mysqldb/3307/data  --user=mysql
]#mysql_install_db  --datadir=/mysqldb/3308/data  --user=mysql
]#vim /etc/my.cnf
[mysqld]
port=3306
datadir=/mysqldb/3306/data
socketdir=/mysqldb/3306/socket/mysql.sock
[mysqld_safe]
log-error=/mysqldb/3306/log/mariadb.log
pid-file=/mysqldb/3306/pid/mariadb.pid
]#cp /etc/my.cnf /mysqldb/3306/etc/
]#cp /etc/my.cnf /mysqldb/3307/etc/
]#cp /etc/my.cnf /mysqldb/3308/etc/
]#vim /mysqldb/3307/etc/my.cnf
]#vim /mysqldb/3308/etc/my.cnf
:%s/3306/3307/g
:%s/3306/3308/g
]#vim /mysqldb/3306/mysqld  #编辑启动脚本
#!/bin/bash
port=3306
mysql_user="root"
mysql_pwd=""
cmd_path="/app/mysql/bin"
mysql_basedir="/mysqldb"
mysql_sock="${mysql_basedir}/${port}/socket/mysql.sock"

function_start_mysql()
{
    if [ ! -e "$mysql_sock" ];then
      printf "Starting MySQL...\n"
      ${cmd_path}/mysqld_safe --defaults-file=${mysql_basedir}/${port}/etc/my.cnf  &> /dev/null  &
    else
      printf "MySQL is running...\n"
      exit
    fi
}

function_stop_mysql()
{
    if [ ! -e "$mysql_sock" ];then
       printf "MySQL is stopped...\n"
       exit
    else
       printf "Stoping MySQL...\n"
       ${cmd_path}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S ${mysql_sock} shutdown
   fi
}

function_restart_mysql()
{
    printf "Restarting MySQL...\n"
    function_stop_mysql
    sleep 2
    function_start_mysql
}

case $1 in
start)
    function_start_mysql
;;
stop)
    function_stop_mysql
;;
restart)
    function_restart_mysql
;;
*)
    printf "Usage: ${mysql_basedir}/${port}/bin/mysqld {start|stop|restart}\n"
esac
]#chmod 700 /mysqldb/{3306,3307,3308}/mysqld
]#/mysqldb/3306/mysqld start
]# ss -ntl
State      Recv-Q Send-Q      Local Address:Port      Peer Address:Port              
LISTEN     0      50                      *:3307                 *:*                 
LISTEN     0      50                      *:3308                 *:*                  
LISTEN     0      128                     *:111                  *:*                  
LISTEN     0      5           192.168.122.1:53                   *:*                  
LISTEN     0      128                     *:22                   *:*                  
LISTEN     0      128             127.0.0.1:631                  *:*                  
LISTEN     0      50                      *:3306                 *:*                  
LISTEN     0      128                    :::111                 :::*                  
LISTEN     0      128                    :::22                  :::*                  
LISTEN     0      128                   ::1:631                :::*  
]#mysql -S /mysqldb/3306/socket/mysql.sock
MariaDB [(none)]> show variables like '%port%';
+-------------------------------------+-------+
| Variable_name                       | Value |
+-------------------------------------+-------+
| extra_port                          | 0     |
| innodb_import_table_from_xtrabackup | 0     |
| innodb_support_xa                   | ON    |
| large_files_support                 | ON    |
| port                                | 3306  |
| progress_report_time                | 5     |
| report_host                         |       |
| report_password                     |       |
| report_port                         | 3306  |
| report_user                         |       |
+-------------------------------------+-------+
10 rows in set (0.00 sec)
MariaDB [(none)]> select user,host,password from mysql.user;
MariaDB [(none)]> update mysql.user set password=password("centos") where user="root";
MariaDB [(none)]>  flush privileges;    #使密码生效
MariaDB [(none)]> \s                    #等价status

猜你喜欢

转载自blog.51cto.com/13698281/2124834