行走在数据库上的行癫(一)

开源数据库SQL实战(一)


Author:行癫

GitHub:https://github.com/blackmed/mysql.git


目录:

● 数据库简介

● 数据库部署

● 数据库基础

● 数据库引擎

一:数据库简介

1.数据库技术构成

​ A:数据库系统 DBS

​ 数据库管理系统(DataBase Management System, DBMS)

​ DBA数据库管理员

​ B:SQL语言(Structured Query Language 即结构化查询语言)

​ DDL语句 数据库定义语言: 数据库、表、视图、索引、存储过程、函数, CREATE DROP ALTER

​ DML语句 数据库操纵语言: 插入数据INSERT、删除数据DELETE,DROP、更新数据UPDATE

​ DQL语句 数据库查询语言: 查询数据 SELECT

​ DCL语句 数据库控制语言: 例如控制用户的访问权限GRANT

2.数据库访问技术

​ A. ODBC

​ B. JDBC

3.数据库分类

​ 关系型:mysql、甲骨文

​ 非关系型数据库:mogoDB、redis

二:数据库部署

1.mysql的yum安装
mysql的官方网站:www.mysql.com

1.下载mysql的yum仓库
[root@xingdian-mysql-1 /]# wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
2.安装mysql的yum仓库
[root@xingdian-mysql-1 /]# rpm -ivh mysql80-community-release-el7-3.noarch.rpm
3.修改安装版本(方法一)
[root@xingdian-mysql-1 /]# yum -y install yum-utils
[root@xingdian-mysql-1 /]# yum repolist all | grep mysql
[root@xingdian-mysql-1 /]# yum-config-manager --enable mysql57-community
[root@xingdian-mysql-1 /]# yum-config-manager --disable mysql80-community
4.安装数据库
[root@xingdian-mysql-1 /]# yum -y install mysql-server mysql
修改yum仓库(方法二)(略)
5.查看数据库的初始密码
[root@xingdian-mysql-1 /]# grep 'password' /var/log/mysqld.log 
2019-07-13T15:14:31.176905Z 1 [Note] A temporary password is generated for root@localhost: k12zPB1r;2Ta
6.修改数据库密码
[root@xingdian-mysql-1 /]# mysqladmin -u root -p'k12zPB1r;2Ta password 'QianFeng@123'
密码:大小写有特殊字符数字

扩展:数据库使用弱密码登录

[root@xingdian-mysql-1 /]# vim /etc/my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
validate_password=off   添加后可设置弱密码强度
注意:修改完配置文件后重新启动数据库
2.编译安装mysql
1.准备编译环境
[root@xingdian-mysql-1 /]# yum -y install ncurses ncurses-devel openssl-devel bison gcc gcc-c++ make cmake

2.准备源码包(www.baidu.com;官网)

3.清空系统残留并创建新的账户
[root@xingdian-mysql-1 /]# userdel -r mysql
[root@xingdian-mysql-1 /]# yum -y remove mariadb mariadb-libs mariadb-server mariadb-devel
[root@xingdian-mysql-1 /]# rm -rf /etc/my*
[root@xingdian-mysql-1 /]# rm -rf /var/lib/mysql
[root@xingdian-mysql-1 /]# rm -rf /var/log/mysql*

4.环境准备
[root@xingdian-mysql-1 /]# groupadd mysql
[root@xingdian-mysql-1 /]# useradd -r -g mysql -s /bin/nolgin mysql

5.解压
[root@xingdian-mysql-1 /]# tar xvf mysql-boost-5.7.26.tar.gz 

6.配置
[[email protected] ~]# cmake . \
-DWITH_BOOST=boost_1_59_0/ \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DSYSCONFDIR=/etc \指定安装目录配置文件的位置,默认就是etc
-DMYSQL_DATADIR=/usr/local/mysql/data \数据目录 错误日志文件
-DINSTALL_MANDIR=/usr/share/man \ 帮助文档的目录
-DMYSQL_TCP_PORT=3306 \ 默认端口号3306
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \ 用来做网络通信,启动的时候才会产生
-DDEFAULT_CHARSET=utf8 \默认字符集
-DEXTRA_CHARSETS=all \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_READLINE=1 \可以上下翻历史命令
-DWITH_SSL=system \
-DWITH_EMBEDDED_SERVER=1 \ 嵌入式服务器
-DENABLED_LOCAL_INFILE=1 \ 支持从本机导入-DWITH_INNOBASE_STORAGE_ENGINE=1
默认存储引擎
提示:boost也可以使用如下指令自动下载
-DDOWNLOAD_BOOST=1

7.编译
[root@xingdian-mysql-1 /]# make

8.安装
[root@xingdian-mysql-1 /]# make install

9.初始化
[root@xingdian-mysql-1 /]# cd /usr/local/mysql               把这个删了就相当于卸载
[root@xingdian-mysql-1 /]# mkdir mysql-files
[root@xingdian-mysql-1 /]# chown -R mysql.mysql /usr/local/mysql
[root@xingdian-mysql-1 /]# ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
初始化,只需要初始化一次

10.启动MySQL-使用mysqld_safe
[root@xingdian-mysql-1 /]# bin/mysqld_safe --user=mysql &  (后台运行)
[root@xingdian-mysql-1 /]# ./bin/mysqladmin -u root -p'原密码' password 123

11.使用客户端测试
[root@xingdian-mysql-1 /]# ./bin/mysql -u root -p '密码'

12.创建数据库配置文件
[root@xingdian-mysql-1 /]# vim /etc/my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data

扩展:

添加环境变量:
echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile  
让环境变量生效
source /etc/profile

三:数据库基础

编译安装:
[root@xingdian-mysql-1 mysql]# ls
COPYING       README       bin   include  mysql-test  support-files
COPYING-test  README-test  docs  lib      share

1、bin目录
用于放置一些可执行文件,如mysql、mysqld、mysqlbinlog等。
2、include目录
用于放置一些头文件,如:mysql.h、mysql_ername.h等。
3、lib目录
用于放置一系列库文件。
4、share目录
用于存放字符集、语言等信息。

yum安装:
/var/lib/mysql   存放数据文件
/usr/share/mysql  用于存放字符集、语言等信息。

四:数据库引擎(了解)

	数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以 获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySQL的核心就是存储引擎。

InnoDB存储引擎:
	InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键;InnoDB是默认的MySQL引擎
InnoDB特点: 
	支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。

MyISAM存储引擎:(了解)
	MyISAM基于ISAM存储引擎,并对其进行扩展。它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。MyISAM拥有较高的插入、查询速度,但不支持事务。
MyISAM特点: 
	插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。如果应用的完整性、并发性要求比较低,也可以使用。

MEMORY存储引擎(了解)
	MEMORY存储引擎将表中的数据存储到内存中,未查询和引用其他表数据提供快速访问
MEMORY特点: 
	所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,可以选择MEMOEY。它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。

如何选择引擎:
    如果要提供提交、回滚、崩溃恢复能力的事物安全(ACID兼容)能力,并要求实现并发控制,InnoDB是一个好的选择;如果数据表主要用来插入和查询记录,则MyISAM引擎能提供较高的处理效率;如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存中的Memory引擎;MySQL中使用该引擎作为临时表,存放查询的中间结果;如果只有INSERT和SELECT操作,可以选择Archive,Archive支持高并发的插入操作,但是本身不是事务安全的。Archive非常适合存储归档数据,如记录日志信息可以使用Archive。
    使用哪一种引擎需要灵活选择,一个数据库中多个表可以使用不同引擎以满足各种性能和实际需求,使用合适的存储引擎,将会提高整个数据库的性能。

存储引擎查看:
mysql> show engines;
	Support列的值表示某种引擎是否能使用:YES表示可以使用、NO表示不能使用、DEFAULT表示该引擎为当前默认的存储引擎
mysql> alter table service engine=innodb;

扩展:

	MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!
• 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
• 事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
• 事务用来管理 insert,update,delete 语句
	一般来说,事务是必须满足4个条件(ACID)::原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。
	
• 原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

• 一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。

• 隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。

• 持久性:事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

  注意:在编写应用程序时,最好事务的控制权限交给开发人员
发布了45 篇原创文章 · 获赞 26 · 访问量 4259

猜你喜欢

转载自blog.csdn.net/zy_xingdian/article/details/103514853