博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MariaDB初识
阅读量:5906 次
发布时间:2019-06-19

本文共 11718 字,大约阅读时间需要 39 分钟。

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

1.yum 安装mariadb

centos7.4系统光盘带的是mariadb5.5

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

2.centos7.4二进制安装mariadb-10.2.15

1.准备用户,解压缩包

]#useradd -r  -d /data/mysqldb -s /sbin/nologin mysql]#tar xvf mariadb-10.2.15-linux-x86_64.tar.gz -C /usr/local

2.准备二进制的程序

]#cd /usr/local]#ln -s mariadb-10.2.15-linux-x86_64/ mysql]#chown -R root:root /usr/local/mysql/  #修改文件的所属组]#setfacl -R -m u:mysql:rwx /usr/local/mysql/]#echo PATH=/usr/local/mysql/bin:$PATH >/etc/profile.d/mysql.sh

3.准备数据目录:

建议逻辑卷,添加新硬盘/dev/sdb

]#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 /dev/vg0/lv_mysql /data]#mount -a          #挂载]#mkdir /data/mysqldb -pv]#chown mysql.mysql /data/mysqldb]#chmod 770 /data/mysqldb   #改变权限,更安全

4.创建数据库文件及配置文件

]#cd /usr/local/mysql/]#scripts/mysql_install_db  --datadir=/data/mysqldb --user=mysqlInstalling 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/mysqldbsocket=/tmp/mysql.sock

5.启动服务及安全初始化

]#cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld]#chkconfig --add mysqld]# service mysqld startStarting mysqld (via systemctl):                           [  OK  ]]#/user/local/mysql/bin/mysql_secure_installation   #安全加护

3.源码编译安装mariadb-10.2.15

1.编译前准备

]#yum install bison bison-devel zlib-devel libcurl-devel libarchive-devel boost-devel gcc gcc-c++ cmake ncurses-devel gnutls-devel libxml2-devel openssl-devel libevent-devel libaio-devel -y]#yum install -y cmake]#useradd -r  -d /data/mysqldb -s /sbin/nologin mysql]#mkdir /data/mysqldb -pv]#mkdir /app/mysql -pv]#setfacl -R -m u:mysql:rwx /app/mysql]#chown mysql.mysql /data/mysqldb]#chmod 770 /data/mysqldb

2.编译安装阶段,使用cmake

]#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

3.编译后的相关配置

]#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]#cp /app/mysql/support-files/mysql.server /etc/init.d/mysqld]#chkconfig --add mysqld]#service mysqld start

4.启动MariaDB服务

初识数据库

]#systemctl start mariadb]#mysqlMariaDB [(none)]>drop database test; #删除数据库testMariaDB [(none)]>use mysql;MariaDB [mysql]> statusMariaDB [mysql]> create database testdb;Query OK, 1 row affected (0.00 sec)MariaDB [mysql]> \! ls /var/lib/mysqlMariaDB [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.sqlMariaDB [(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的环境变量;

]#vim /etc/profile.d/mysql.shexport MYSQL_PS1="(\u@\h) [\d]> "]#. /etc/profile.d/mysql.sh

2.命令行的选项改变mariadb_PS1;

MariaDB [(none)]> prompt \u@[\D]--->PROMPT set to '\u@[\D]--->'root@[Mon Jun  4 23:08:30 2018]--->]#mysql --prompt="(\u@\h) [\d]> "

3./etc/my.cnf.d/mysql-clients.cnf的文件修改

]#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多实例实现

1.创建多实例的文件目录

]#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

2.配置相关多实例的配置文件

]#vim /etc/my.cnf[mysqld]port=3306datadir=/mysqldb/3306/datasocketdir=/mysqldb/3306/socket/mysql.sock[mysqld_safe]log-error=/mysqldb/3306/log/mariadb.logpid-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:%s/3306/3307/g]#vim /mysqldb/3308/etc/my.cnf:%s/3306/3308/g

3.编辑多实例的服务脚本

]#vim /mysqldb/3306/mysqld  #编辑启动脚本#!/bin/bashport=3306mysql_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 instart)    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]#/mysqldb/3307/mysqld start]#/mysqldb/3308/mysqld start]# ss -ntlState      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.sockMariaDB [(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

转载于:https://blog.51cto.com/13698281/2124834

你可能感兴趣的文章
MySql
查看>>
sql server 下载安装标记
查看>>
js运算符(运算符的结合性)
查看>>
idea 编译级别的设置
查看>>
内置对象Array的原型对象中添加方法
查看>>
6大设计原则
查看>>
Github简介
查看>>
CISCO2691的OSPF点对点密文测评测试
查看>>
POJ 1661 Help Jimmy(递推DP)
查看>>
Node.js 中文学习资料和教程导航
查看>>
查找(AVL平衡二叉树)
查看>>
AJAX-初学AJAX本地环境配置
查看>>
【精选】Nginx负载均衡学习笔记(一)实现HTTP负载均衡和TCP负载均衡(官方和OpenResty两种负载配置)...
查看>>
Linux常用基本命令( rmdir, rm, mv )
查看>>
POJ2406 Power Strings(KMP)
查看>>
JavaScript-console的使用_016
查看>>
两种方式设置iframe的高度区别
查看>>
Iterator 和 for...of 循环
查看>>
关于iOS 11.x微信连wifi流程中,在Portal页无法拉起微信问题的简单记录
查看>>
Python GUI库wxPython官网Hello World示例的逐行解释
查看>>