美文网首页数据库
1. 数据库mysql

1. 数据库mysql

作者: BeautifulSoulpy | 来源:发表于2020-11-15 22:01 被阅读0次

总结

  1. 如何描述业务的数据_逻辑细节 (软件工程师:数据库中);
  2. 关系型数据库是重点;SQL语句是重点,开发必备的技术;
  3. SQL性能优化: 建议 大写;函数可以小写:SELECT user();

数据库

1. 数据库的发展

Oracle的发展
拉里·埃里森(Larry Ellison)仔细阅读了IBM的关系数据库的论文,敏锐意识到在这个研究基础上可以开发商用软件系统。他们决定开发通用商用数据库系统Oracle,这个名字来源于他们曾给中央情报局做过的项目名。几个月后,他们就开发了Oracle 1.0。Oracle快速的被推销,但是很不稳定。直到1992年的时候,Oracle7才逐渐稳定下来,并取得巨大成功。2001年的9i版本被广泛应用。

2009年4月20日,甲骨文公司宣布将以每股9.50美元,总计74亿美金收购SUN(计算机系统)公司。2010年1月成功收购。
2013年,甲骨文超过IBM,成为继微软之后的全球第二大软件公司。

Mysql发展

1985年几个瑞典人为大型零售商的项目设计了一种利用索引顺序存取数据的软件,这就是MyISAM的前身。1996年,MySQL 1.0发布,随后发布了3.11.1版本,并开始往其它平台移植。2000年MySQL采用GPL协议开源。 MySQL 4.0开始支持MyISAM、InnoDB引擎。2005年10月,MySQL 5.0成为里程碑版本。

2008年1月被Sun公司收购。
2009年1月,在Oracle收购MySQL之前,Monty Widenius担心收购,就从MySQL Server 5.5开始一条新的GPL分支,起名MariaDB。

MySQL的引擎是插件化的,可以支持很多种引擎:
MyISASM,不支持事务,插入、查询速度快。
InnoDB,支持事务,行级锁,MySQL 5.5起的默认引擎

去IOE
它是阿里巴巴造出的概念。其本意是,在阿里巴巴的IT架构中,去掉IBM的小型机、Oracle数据库、EMC存储设备,取而代之使用自己在开源软件基础上开发的系统。传统上,一个高端大气的数据中心,IBM小型机、Oracle数据库、EMC存储设备,可以说缺一不可。而使用这些架构的企业,不但采购、维护成本极高,核心架构还掌握在他人手中。

对于阿里巴巴这样大规模的互联网应用,应该采用开源、开放的系统架构。这种思路并不是阿里巴巴的新发明,国外的谷歌、Facebook、亚马逊等早已为之。只不过它们几乎一开始就有没有采用IT商业公司的架构,所以他们也不用“去IOE”。

去IOE,转而使用廉价的架构,稳定性一定下降,需要较高的运维水平解决。

NoSQL
NoSQL是对非SQL、非传统关系型数据库(redis\MongoDB)的统称。
NoSQL一词诞生于1998年,2009年这个词汇被再次提出指非关系型、分布式、不提供ACID的数据库设计模式

随着互联网时代的到来,数据爆发式增长,数据库技术发展日新月异,要适应新的业务需求。
随着移动互联网、物联网的到来,大数据的技术中NoSQL也同样重要。

数据库流行度排名

2.常见的数据库

MYSQL:
开源免费的数据库,小型的数据库.已经被Oracle收购了.MySQL6.x版本也开始收费。

Oracle:
收费的大型数据库,Oracle公司的产品。Oracle收购SUN公司,收购MYSQL。

DB2:
IBM公司的数据库产品,收费的。常应用在银行系统中。

SQLServer:
MicroSoft 公司收费的中型的数据库。C#、.net等语言常使用。

SyBase:
已经淡出历史舞台。提供了一个非常专业数据建模的工具PowerDesigner。

SQLite:
嵌入式的小型数据库,应用在手机端。

在这些数据库中,和Java相关的数据库:MYSQL,Oracle。这里我们使用的是MySQL数据库。

Redis
内存数据存储的地方;消息队列、系统外的数据;速度非常快;

关系型数据库

关系 :关系就是二维表,其中:表中的行、列次序并不重要
行row:表中的每一行,又称为一条记录
列column:表中的每一列,称为属性,字段
主键(Primary key):用于惟一确定一个记录的字段
域domain:属性的取值范围,如,性别只能是‘男’和‘女’两个值

关系数据库
RDBMS:
MySQL: MySQL, MariaDB, Percona Server
PostgreSQL: 简称为pgsql,EnterpriseDB
Oracle
MSSQL
DB2
数据库排名:
https://db-engines.com/en/ranking

联系类型

PK 主键 FK 外键
联系的类型
一对一联系(1:1)
一对多联系(1:n)
多对多联系(m:n)

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

数据的约束条件 :是一组完整性规则的集合
实体(行)完整性 Entity integrity
域(列)完整性 Domain Integrity
参考完整性 Referential Integrity (主外键)

约束

约束:constraint,表中的数据要遵守的限制
主键:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行;
必须提供数据,即NOT NULL,一个表只能有一个
惟一键:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行;
允许为NULL,一个表可以存在多个
外键:一个表中的某字段可填入的数据取决于另一个表的主键或唯一键已有
的数据
检查:字段值在一定范围内

简易数据规划流程

第一阶段:收集数据,得到字段
• 收集必要且完整的数据项
• 转换成数据表的字段
第二阶段:把字段分类,归入表,建立表的关联
• 关联:表和表间的关系
• 分割数据表并建立关联的优点
• 节省空间
• 减少输入错误
• 方便数据修改
第三阶段:
• 规范化数据库

MySQL

MySQL是一种关系型数据库管理软件,支持网络访问,默认服务端口3306。
MySQL通信使用mysql协议。

问题:MySQL应该基于什么网络协议通信?

连接字符串参考
https://dev.mysql.com/doc/connector-net/en/connector-net-connection-options.html"server=127.0.0.1;uid=root;pwd=12345;database=test"

1.MySQL和MariaDB

官方网址:
https://www.mysql.com/
http://mariadb.org/
官方文档
https://dev.mysql.com/doc/
https://mariadb.com/kb/en/
版本演变:
MySQL:5.1 --> 5.5 --> 5.6 --> 5.7 -->8.0
MariaDB:5.5 -->10.0--> 10.1 --> 10.2 --> 10.3

2. MYSQL的特性

插件式存储引擎:也称为“表类型”,存储管理器有多种实现版本,功能和特
性可能均略有差别;用户可根据需要灵活选择,Mysql5.5.5开始innoDB引擎是
MYSQL默认引擎
MyISAM ==> Aria
InnoDB ==> XtraDB
单进程,多线程
诸多扩展和新特性
提供了较多测试组件
开源

3. 安装MYSQL

Mariadb安装方式
1、源代码:编译安装
2、二进制格式的程序包:展开至特定路径,并经过简单配置后即可使用
3、程序包管理器管理的程序包
CentOS 安装光盘
项目官方:https://downloads.mariadb.org/mariadb/repositories/
国内镜像:https://mirrors.tuna.tsinghua.edu.cn/mariadb/mariadb�x.y.z/yum/centos/7/x86_64/

3.1 RPM包安装MySQL

RPM包安装
CentOS 7:安装光盘直接提供
mariadb-server 服务器包
mariadb 客户端工具包
CentOS 6 提高安全性
mysql_secure_installation
设置数据库管理员root口令
禁止root远程登录
删除anonymous用户帐号
删除test数据库

[root@Centos7 dell]# yum info mariadb-server
# 
Installed Packages
Name        : mariadb-server
Arch        : x86_64
Epoch       : 1
Version     : 5.5.65
Release     : 1.el7
Size        : 58 M
Repo        : installed
From repo   : base
Summary     : The MariaDB server and related files
URL         : http://mariadb.org
License     : GPLv2 with exceptions and LGPLv2 and BSD
Description : MariaDB is a multi-user, multi-threaded SQL database server. It is a
            : client/server implementation consisting of a server daemon (mysqld)
            : and many different client programs and libraries. This package contains
            : the MariaDB server and some accompanying files and directories.
            : MariaDB is a community developed branch of MySQL.

# 开始安装
[root@Centos7 dell]# yum install -y mariadb-server

# 配置文件
[root@Centos7 ~]# rpm -ql mariadb-server
/etc/logrotate.d/mariadb
/etc/my.cnf.d/server.cnf

/usr/share/mysql/my-large.cnf   # 大环境配置
/usr/share/mysql/my-medium.cnf
/usr/share/mysql/my-small.cnf   # 小环境配置

/var/lib/mysql      # 存放数据库的路径;
1. mysql 配置设置
ss -ntl
[root@Centos7 ~]# ss -tanl        # 没开启 就无 3306
State      Recv-Q Send-Q                                      Local Address:Port                                                     Peer Address:Port
LISTEN     0      5                                           192.168.122.1:53                                                                  *:*
LISTEN     0      128                                                     *:22                                                                  *:*
LISTEN     0      128                                             127.0.0.1:631                                                                 *:*
LISTEN     0      100                                             127.0.0.1:25                                                                  *:*
LISTEN     0      128                                                     *:111                                                                 *:*
LISTEN     0      128                                                  [::]:22                                                               [::]:*
LISTEN     0      128                                                 [::1]:631                                                              [::]:*
LISTEN     0      100                                                 [::1]:25                                                               [::]:*
LISTEN     0      128                                                  [::]:111                                                              [::]:*
[root@Centos7 ~]#

[root@Centos7 ~]# systemctl start mariadb  # 启动
[root@Centos7 ~]# ss -tanl
State      Recv-Q Send-Q                                      Local Address:Port                                                     Peer Address:Port
LISTEN     0      50                                                      *:3306                                                                *:*

[root@Centos7 ~]# ss -ntlp  # 查看使用的程序;
LISTEN     0      50                                                      *:3306                                                                *:*                   users:(("mysqld",pid=66929,fd=14))

[root@Centos7 ~]# ps aux   #mysql 主程序
mysql     66929  0.1  4.2 968916 79568 ?        Sl   02:56   0:00 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid --socket=/var/lib

[root@Centos7 ~]# pstree -p   # mysql 线程
线程启用
# 编译安装这些脚本做的事情都要自己做;
[root@Centos7 ~]# rpm -q --scripts mariadb-server
preinstall scriptlet (using /bin/sh):       # 安装前创建账号
/usr/sbin/groupadd -g 27 -o -r mysql >/dev/null 2>&1 || :
/usr/sbin/useradd -M -N -g mysql -o -r -d /var/lib/mysql -s /sbin/nologin \
        -c "MariaDB Server" -u 27 mysql >/dev/null 2>&1 || :
postinstall scriptlet (using /bin/sh):

if [ $1 -eq 1 ] ; then
        # Initial installation
        systemctl preset mariadb.service >/dev/null 2>&1 || :
fi

/bin/chmod 0755 /var/lib/mysql
/bin/touch /var/log/mariadb/mariadb.log

/usr/sbin/update-alternatives --install /usr/bin/mysqlbug \
        mysqlbug /usr/lib64/mysql/mysqlbug 64
preuninstall scriptlet (using /bin/sh):

if [ $1 -eq 0 ] ; then
        # Package removal, not upgrade
        systemctl --no-reload disable mariadb.service > /dev/null 2>&1 || :
        systemctl stop mariadb.service > /dev/null 2>&1 || :
fi
postuninstall scriptlet (using /bin/sh):

systemctl daemon-reload >/dev/null 2>&1 || :
if [ $1 -ge 1 ] ; then
        # Package upgrade, not uninstall
        systemctl try-restart mariadb.service >/dev/null 2>&1 || :
fi

if [ $1 -eq 0 ] ; then
        /usr/sbin/update-alternatives --remove mysqlbug /usr/lib64/mysql/mysqlbug
fi
2. mysql操作
[root@Centos7 ~]# mysql -uroot -p -h127.0.0.1
Enter password:
[root@Centos7 ~]# mysql
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |   # 虚拟数据库,数据库内容在内存中,重启会丢失;
| mysql              |          # mysql系统数据库
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.01 sec)

MariaDB [(none)]> status
--------------
mysql  Ver 15.1 Distrib 5.5.65-MariaDB, for Linux (x86_64) using readline 5.1

Connection id:          2
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server:                 MariaDB
Server version:         5.5.65-MariaDB MariaDB Server
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    latin1         # 字符集为 拉丁字符;
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:            /var/lib/mysql/mysql.sock
Uptime:                 13 min 53 sec

MariaDB [(none)]> show character set;    # 查看所有的字符集;
+----------+-----------------------------+---------------------+--------+
| Charset  | Description                 | Default collation   | Maxlen |      # 排序规则(默认就行)
+----------+-----------------------------+---------------------+--------+
| big5     | Big5 Traditional Chinese    | big5_chinese_ci     |      2 |
| dec8     | DEC West European           | dec8_swedish_ci     |      1 |
| cp850    | DOS West European           | cp850_general_ci    |      1 |
| hp8      | HP West European            | hp8_english_ci      |      1 |
| koi8r    | KOI8-R Relcom Russian       | koi8r_general_ci    |      1 |
| latin1   | cp1252 West European        | latin1_swedish_ci   |      1 |
| latin2   | ISO 8859-2 Central European | latin2_general_ci   |      1 |
| swe7     | 7bit Swedish                | swe7_swedish_ci     |      1 |
| ascii    | US ASCII                    | ascii_general_ci    |      1 |
| ujis     | EUC-JP Japanese             | ujis_japanese_ci    |      3 |
| sjis     | Shift-JIS Japanese          | sjis_japanese_ci    |      2 |
| hebrew   | ISO 8859-8 Hebrew           | hebrew_general_ci   |      1 |
| tis620   | TIS620 Thai                 | tis620_thai_ci      |      1 |
| euckr    | EUC-KR Korean               | euckr_korean_ci     |      2 |
| koi8u    | KOI8-U Ukrainian            | koi8u_general_ci    |      1 |
| gb2312   | GB2312 Simplified Chinese   | gb2312_chinese_ci   |      2 |   # 国标简体字;
| greek    | ISO 8859-7 Greek            | greek_general_ci    |      1 |
| cp1250   | Windows Central European    | cp1250_general_ci   |      1 |
| gbk      | GBK Simplified Chinese      | gbk_chinese_ci      |      2 |
| latin5   | ISO 8859-9 Turkish          | latin5_turkish_ci   |      1 |
| armscii8 | ARMSCII-8 Armenian          | armscii8_general_ci |      1 |
| utf8     | UTF-8 Unicode               | utf8_general_ci     |      3 |   # 在mysql中有点小问题;不兼容(表情包utf8mb4)
| ucs2     | UCS-2 Unicode               | ucs2_general_ci     |      2 |
| cp866    | DOS Russian                 | cp866_general_ci    |      1 |
| keybcs2  | DOS Kamenicky Czech-Slovak  | keybcs2_general_ci  |      1 |
| macce    | Mac Central European        | macce_general_ci    |      1 |
| macroman | Mac West European           | macroman_general_ci |      1 |
| cp852    | DOS Central European        | cp852_general_ci    |      1 |
| latin7   | ISO 8859-13 Baltic          | latin7_general_ci   |      1 |
| utf8mb4  | UTF-8 Unicode               | utf8mb4_general_ci  |      4 |   # 推荐使用UTF8mb4,支持简体和表情;
| cp1251   | Windows Cyrillic            | cp1251_general_ci   |      1 |
| utf16    | UTF-16 Unicode              | utf16_general_ci    |      4 |
| cp1256   | Windows Arabic              | cp1256_general_ci   |      1 |
| cp1257   | Windows Baltic              | cp1257_general_ci   |      1 |
| utf32    | UTF-32 Unicode              | utf32_general_ci    |      4 |
| binary   | Binary pseudo charset       | binary              |      1 |
| geostd8  | GEOSTD8 Georgian            | geostd8_general_ci  |      1 |
| cp932    | SJIS for Windows Japanese   | cp932_japanese_ci   |      2 |
| eucjpms  | UJIS for Windows Japanese   | eucjpms_japanese_ci |      3 |
+----------+-----------------------------+---------------------+--------+

MariaDB [test]> system hostname   # 查找主机名称;
Centos7
MariaDB [mysql]> system ls      # 当期目录下的文件列表;
anaconda-ks.cfg  initial-setup-ks.cfg
MariaDB [mysql]> system cat /etc/shadow    # system 能执行root账户能执行的任何操作;
MariaDB [mysql]> select user();    # 确认当前用户名称;
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)

MariaDB [mysql]> select user,host,password from user;   # 查看用户信息;
+------+-----------+----------+
| user | host      | password |
+------+-----------+----------+
| root | localhost |          |
| root | centos7   |          |
| root | 127.0.0.1 |          |
| root | ::1       |          |
|      | localhost |          |    # 匿名账号;任意用户可以登录;
|      | centos7   |          |
+------+-----------+----------+
6 rows in set (0.00 sec)

[root@Centos7 mysql]# mysql_secure_installation    # 设置安全策略;

Remove anonymous users? [Y/n]   # 是否移除匿名账户;
Disallow root login remotely? [Y/n] n   # 是否禁用远程登录; 生产设置为y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y    # 刷新立即生效;

[root@Centos7 ~]# mysql -p 
[root@Centos7 ~]# mysql -p -uroot    # 重新登录

MariaDB [mysql]> select user,host,password from user;
+------+-----------+-------------------------------------------+
| user | host      | password                                  |
+------+-----------+-------------------------------------------+
| root | localhost | *A4B6157319038724E3560894F7F932C8886EBFCF |    # 发现口令被加密过了;
| root | centos7   | *A4B6157319038724E3560894F7F932C8886EBFCF |
| root | 127.0.0.1 | *A4B6157319038724E3560894F7F932C8886EBFCF |
| root | ::1       | *A4B6157319038724E3560894F7F932C8886EBFCF |
+------+-----------+-------------------------------------------+
3. MariaDB配置说明

 客户端程序
mysql: 交互式的CLI工具
mysqldump:备份工具,基于mysql协议向mysqld发起查询请求,并将查得的所
有数据转换成insert等写操作语句保存文本文件中
mysqladmin:基于mysql协议管理mysqld
mysqlimport:数据导入工具
 MyISAM存储引擎的管理工具: # 不推荐使用的;
myisamchk:检查MyISAM库
myisampack:打包MyISAM表,只读
服务器端程序
mysqld_safe
mysqld
mysqld_multi 多实例(同时开多个软件(同一个)) ,示例:mysqld_multi --example

用户账号

mysql用户账号由两部分组成:
'USERNAME'@'HOST‘
说明:
HOST限制此用户可通过哪些远程主机连接mysql服务器
支持使用通配符
% 匹配任意长度的任意字符
172.16.0.0/255.255.0.0 或 172.16.%.%
_ 匹配任意单个字符

Mysql 客户端

mysql使用模式:
交互式模式:
可运行命令有两类:
客户端命令:
\h, help
\u,use
\s,status
!,system

服务器端命令:
SQL语句, 需要语句结束符
脚本模式:
mysql –uUSERNAME -pPASSWORD < /path/somefile.sql
mysql> source /path/from/somefile.sql

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 获取程序默认使用的配置

socket地址

服务器监听的两种socket地址
ip socket: 监听在tcp的3306端口,支持远程通信
unix sock: 监听在sock文件上,仅支持本机通信
如:/var/lib/mysql/mysql.sock)
说明:host为localhost,127.0.0.1时自动使用unix sock

服务器端配置

 服务器端(mysqld):工作特性有多种配置方式
1、命令行选项:
2、配置文件:类ini格式
集中式的配置,能够为mysql的各应用程序提供配置信息
[mysqld] [mysqld_safe] [mysqld_multi] [mysql] [mysqldump]
[server]
[client]
格式:parameter = value
说明:_和- 相同
1,ON,TRUE意义相同, 0,OFF,FALSE意义相同

配置文件

配置文件:
后面覆盖前面的配置文件,顺序如下:
/etc/my.cnf Global选项
/etc/mysql/my.cnf Global选项
SYSCONFDIR/my.cnf Global选项
$MYSQL_HOME/my.cnf Server-specific 选项
--defaults-extra-file=path
~/.my.cnf User-specific 选项

MairaDB配置

侦听3306/tcp端口可以在绑定有一个或全部接口IP上
vim /etc/my.cnf
[mysqld]
skip-networking=1
关闭网络连接,只侦听本地客户端, 所有和服务器的交互都通过一个socket实

现,socket的配置存放在/var/lib/mysql/mysql.sock) 可在/etc/my.cnf修改

3.2 二进制 安装MySQL

将源码编译好了进行安装 需要自己设置 安装路径

通用二进制格式安装过程

二进制格式安装过程
(1) 准备用户
groupadd -r -g 306 mysql
useradd -r -g 306 -u 306 –d /data/mysql mysql

(2) 准备数据目录,建议使用逻辑卷
mkdir /data/mysql
chown mysql:mysql /data/mysql

(3) 准备二进制程序
tar xf mariadb-VERSION-linux-x86_64.tar.gz -C /usr/local
cd /usr/local
ln -sv mariadb-VERSION mysql
chown -R root:mysql /usr/local/mysql/
通用二进制格式安装过程

(4) 准备配置文件
mkdir /etc/mysql/
cp support-files/my-large.cnf /etc/mysql/my.cnf
[mysqld]中添加三个选项:
datadir = /data/mysql
innodb_file_per_table = on
skip_name_resolve = on 禁止主机名解析,建议使用

(5)创建数据库文件
cd /usr/local/mysql/
./scripts/mysql_install_db --datadir=/data/mysql --user=mysql
(6)准备服务脚本,并启动服务
cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
service mysqld start
(7)PATH路径
echo ‘PATH=/user/local/mysql/bin:$PATH’ > /etc/profile.d/mysql
(8)安全初始化

/user/local/mysql/bin/mysql_secure_installation

chown -R root:mysql /usr/local/mysql/

3.3 源码编译安装mariadb

安装包
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
yum install –y openssl openssl-devel ncurses ncurses-devel
yum -y install autoconf

做准备用户和数据目录
useradd –r –s /sbin/nologin –d /data/mysql/ mysql
mkdir /data/mysql
chown mysql.mysql /data/mysql
tar xvf mariadb-10.2.18.tar.gz

cmake 编译安装
cmake的重要特性之一是其独立于源码(out-of-source)的编译功能,即编译工作可以在
另一个指定的目录中而非源码目录中进行,这可以保证源码目录不受任何一次编译的影
响,因此在同一个源码树上可以进行多次不同的编译,如针对于不同平台编译
编译选项:https://dev.mysql.com/doc/refman/5.7/en/source-configuration-options.html

准备环境变量
echo 'PATH=/app/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
. /etc/profile.d/mysql.sh
生成数据库文件

cd /app/mysql/
scripts/mysql_install_db --datadir=/data/mysql/ --user=mysql
准备配置文件
cp /app/mysql/support-files/my-huge.cnf /etc/my.cnf
准备启动脚本
cp /app/mysql/support-files/mysql.server /etc/init.d/mysqld
启动服务
chkconfig --add mysqld ;service mysqld start




>cd mariadb-10.2.18/
cmake . \
-DCMAKE_INSTALL_PREFIX=/app/mysql \
-DMYSQL_DATADIR=/data/mysql/ \
-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=/data/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci

make && make install 
** 提示:如果出错,执行rm -f CMakeCache.txt**

-- Installing: /usr/local/mysql/support-files/mysql.server   # 安装在/usr/local/mysql/
1. 开始准备安装

https://downloads.mariadb.org/mariadb/10.2.18/

10.2.18
-rw-r--r--. 1 root root 456140624 Nov 15  2020 mariadb-10.2.18-linux-x86_64.tar.gz
-rw-r--r--. 1 root root  71715758 Nov 15  2020 mariadb-10.2.18.tar.gz

tar xvf mariadb-10.2.18.tar.gz    # 先解开压缩文件;
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 

[root@Centos7 ~]# useradd -r -s /sbin/mologin -d /data/mysql mysql    #创建mysql用户、mysql数据存储的位置;
[root@Centos7 ~]# getent passwd mysql
mysql:x:988:982::/data/mysql:/sbin/mologin

[root@Centos7 /]# mkdir /data/mysql -pv     #创建mysql文件夹;用来存放数据库数据;
mkdir: created directory ‘/data’
mkdir: created directory ‘/data/mysql’
[root@Centos7 /]# chown mysql.mysql /data/mysql/
[root@Centos7 /]# ll -d /data/mysql/       
drwxr-xr-x. 2 mysql mysql 6 Aug  2 23:23 /data/mysql/

[root@Centos7 dell]# cd mariadb-10.2.18/
[root@Centos7 mariadb-10.2.18]# du -sh
505M    .

# 报错执行
ln -s /usr/local/mysql/bin/* /usr/sbin/
ln -s /usr/local/mysql/bin/* /usr/bin/
yum install –y openssl openssl-devel ncurses ncurses-devel
yum -y install autoconf

[root@Centos7 mariadb-10.2.18]# cmake . \
> -DCMAKE_INSTALL_PREFIX=/app/mysql \
> -DMYSQL_DATADIR=/data/mysql/ \
> -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=/data/mysql/mysql.sock \
> -DDEFAULT_CHARSET=utf8 \
> -DDEFAULT_COLLATION=utf8_general_ci

-- Configuring done
-- Generating done
-- Build files have been written to: /home/dell/mariadb-10.2.18

make && make install           # 开始编译;
-- Installing: /usr/local/mysql/support-files/mysql.server   # 安装在/usr/local/mysql/

[root@Centos7 mariadb-10.2.18]# cd /usr/local/mysql/

# 配置环境变量
[root@Centos7 mysql]# nano /etc/profile.d/mysql.sh
PATH=/usr/local/mysql/bin:$PATH

[root@Centos7 mysql]# . /etc/profile.d/mysql.sh           # 生效;
[root@Centos7 mysql]# echo $PATH
/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

# 执行脚本;生成原始数据据库
[root@Centos7 mysql]# scripts/mysql_install_db --datadir=/data/mysql --user=mysql
Installing MariaDB/MySQL system tables in '/data/mysql' ...
OK

[root@Centos7 mysql]# ls /data/mysql/
aria_log.00000001  aria_log_control  ib_buffer_pool  ibdata1  ib_logfile0  ib_logfile1  mysql  performance_schema  test

数据库每张表单独存放设置
nano /etc/my.cnf  
[mysqld]
innodb_file_per_table


[root@Centos7 mysql]# mkdir /etc/mysql/
[root@Centos7 mysql]# cp support-files/my-huge.cnf /etc/mysql/my.cnf



# 查看配置文件
[root@Centos7 mysql]# nano /etc/mysql/my.cnf
[client]
#password       = your_password
port            = 3306
socket          = /tmp/mysql.sock

# Here follows entries for some specific programs

# The MySQL server
[mysqld]
port            = 3306
socket          = /tmp/mysql.sock
skip-external-locking

# 启动脚本
[root@Centos7 mysql]# cp support-files/mysql.server /etc/init.d/mysqld

[root@Centos7 mysql]# chkconfig --add mysqld
[root@Centos7 mysql]# chkconfig --list

Note: This output shows SysV services only and does not include native
      systemd services. SysV configuration data might be overridden by native
      systemd configuration.

      If you want to list systemd services use 'systemctl list-unit-files'.
      To see services enabled on particular target use
      'systemctl list-dependencies [target]'.

mysqld          0:off   1:off   2:on    3:on    4:on    5:on    6:off
netconsole      0:off   1:off   2:off   3:off   4:off   5:off   6:off
network         0:off   1:off   2:on    3:on    4:on    5:on    6:off

[root@Centos7 mysql]# cp /etc/mysql/my.cnf /etc/my.cnf    # 复制配置好的启动文件;

4. MYSQL数据库的各种操作

4.1 关系型数据库的常见组件

为了性能,有些是不推荐使用的;

数据库:database
表:table
行:row
列:column
索引:index
视图:view
用户:user
权限:privilege
存储过程:procedure
存储函数:function # N
触发器:trigger # N
事件调度器:event scheduler,任务计划

4.2 SQL 语言
SQL语言的兴起与语法标准

20世纪70年代,IBM开发出SQL,用于DB2
1981年,IBM推出SQL/DS数据库
业内标准微软和Sybase的T-SQL,Oracle的PL/SQL
SQL作为关系型数据库所使用的标准语言,最初是基于IBM的实现在1986年被
批准的。1987年,“国际标准化组织(ISO)”把ANSI(美国国家标准化组织)
SQL作为国际标准。
SQL:ANSI SQL
SQL-1986, SQL-1989, SQL-1992, SQL-1999, SQL-2003 , SQL-2008
SQL-2011

SQL语言规范

在数据库系统中,SQL语句不区分大小写(建议用大写) **
SQL语句可单行或多行书写,以“;”结尾
关键词不能跨多行或简写
用空格和缩进来提高语句的可读性
子句通常位于独立行,便于编辑,提高可读性
注释:
SQL标准**:
/*注释内容*/ 多行注释
-- 注释内容 单行注释,注意有空格
MySQL注释: #

4.3 数据库对象

数据库的组件(对象):
数据库、表、索引、视图、用户、存储过程、函数、触发器、事件调度器等
命名规则
必须以字母开头
可包括数字和三个特殊字符(# _ $) 不要使用MySQL的保留字
同一database(Schema)下的对象不能同名

4.4 SQL语句分类

SQL语句分类:
DDL: Data Defination Language 数据定义语言
CREATE,DROP,ALTER
DML: Data Manipulation Language 数据操纵语言
INSERT,DELETE,UPDATE
DCL:Data Control Language 数据控制语言
GRANT,REVOKE,COMMIT,ROLLBACK
DQL:Data Query Language 数据查询语言
SELECT

4.5 SQL语句构成

SQL语句构成:
Keyword组成clause子句
多条clause组成语句

示例:
SELECT * SELECT子句
FROM products FROM子句
WHERE price>400 WHERE子句
说明:一组SQL语句,由三个子句构成,SELECT,FROM和WHERE是关键字

4.6 数据库操作

创建数据库
CREATE DATABASE|SCHEMA [IF NOT EXISTS] 'DB_NAME';
CHARACTER SET 'character set name' # 字符集设置;
COLLATE 'collate name' # 排序规则;
删除数据库
DROP DATABASE|SCHEMA [IF EXISTS] 'DB_NAME';
查看支持所有字符集:SHOW CHARACTER SET;
查看支持所有排序规则:SHOW COLLATION;
获取命令使用帮助
mysql> HELP KEYWORD;
查看数据库列表
mysql> SHOW DATABASES;

MariaDB [(none)]> CREATE DATABASE testdb;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| testdb             |
+--------------------+
4 rows in set (0.00 sec)
4.7 表

:二维关系
设计表:遵循规范
定义:字段,索引
字段:字段名,字段数据类型,修饰符
约束,索引:应该创建在经常用作查询条件的字段上

创建表

创建表:CREATE TABLE
(1) 直接创建
(2) 通过查询现存表创建;新表会被直接插入查询而来的数据
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[(create_definition,...)] [table_options] [partition_options] select_statement
(3) 通过复制现存的表的表结构创建,但不复制数据
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name { LIKE
old_tbl_name | (LIKE old_tbl_name) }
注意:
 Storage Engine是指表类型,也即在表创建时指明其使用的存储引擎,同一
库中不同表可以使用不同的存储引擎
 同一个库中表建议要使用同一种存储引擎类型

MariaDB [(none)]> use testdb
Database changed
MariaDB [testdb]> show tables;
Empty set (0.00 sec)

# 创建 表 student
MariaDB [testdb]> create table student(id smallint unsigned primary key , name char(30), gender char(1) default 'm',phone char(11) );
Query OK, 0 rows affected (0.01 sec)

MariaDB [testdb]> show create table student;;
+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table
                                                             |
+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| student | CREATE TABLE `student` (
  `id` smallint(5) unsigned NOT NULL,
  `name` char(30) DEFAULT NULL,
  `gender` char(1) DEFAULT 'm',
  `phone` char(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |    # 默认的 latin1 有乱码问题;
+---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

# 创建表 emplyee(默认字符集 uutf8mb4)
MariaDB [testdb]> create table employee(id smallint unsigned primary key , name char(30), gender char(1) default 'm',phone char(11) ) DEFAULT CHARSET=utf8mb4;

数据库每张表单独储存

[root@Centos7 ~]# nano /etc/my.cnf
[root@Centos7 ~]# systemctl restart maraidb

[mysqld]
innodb_file_per_table

修改表

DROP TABLE [IF EXISTS] 'tbl_name';
 ALTER TABLE 'tbl_name'
字段:
添加字段:add
ADD col1 data_type [FIRST|AFTER col_name]
删除字段:drop
修改字段:
alter(默认值), change(字段名), modify(字段属性)
索引:
添加索引:add index
删除索引:drop index
表选项
修改:  查看表上的索引:SHOW INDEXES FROM [db_name.]tbl_name;  查看帮助:Help ALTER TABLE

修改表示例

ALTER TABLE students RENAME s1;
ALTER TABLE s1 ADD phone varchar(11) AFTER name;
ALTER TABLE s1 MODIFY phone int;
ALTER TABLE s1 CHANGE COLUMN phone mobile char(11);
ALTER TABLE s1 DROP COLUMN mobile;
Help ALTER TABLE 查看帮助
ALTER TABLE students ADD gender ENUM('m','f')
ALETR TABLE students CHANGE id sid int UNSIGNED NOT NULL
PRIMARY KEY;
ALTER TABLE students ADD UNIQUE KEY(name);
ALTER TABLE students ADD INDEX(age);
DESC students;
SHOW INDEXES FROM students;
ALTER TABLE students DROP age;

创建表方法2  引用其他表
MariaDB [testdb]> select user,host,password from mysql.user;
+------+-----------+-------------------------------------------+
| user | host      | password                                  |
+------+-----------+-------------------------------------------+
| root | localhost | *A4B6157319038724E3560894F7F932C8886EBFCF |
| root | centos7   | *A4B6157319038724E3560894F7F932C8886EBFCF |
| root | 127.0.0.1 | *A4B6157319038724E3560894F7F932C8886EBFCF |
| root | ::1       | *A4B6157319038724E3560894F7F932C8886EBFCF |
+------+-----------+-------------------------------------------+
4 rows in set (0.00 sec)

MariaDB [testdb]> show tables;
+------------------+
| Tables_in_testdb |
+------------------+
| employee         |
| student          |
+------------------+
2 rows in set (0.00 sec)

MariaDB [testdb]> create table userinfo select user,host,password from mysql.user;
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

MariaDB [testdb]> select * from userinfo;
+------+-----------+-------------------------------------------+
| user | host      | password                                  |
+------+-----------+-------------------------------------------+
| root | localhost | *A4B6157319038724E3560894F7F932C8886EBFCF |
| root | centos7   | *A4B6157319038724E3560894F7F932C8886EBFCF |
| root | 127.0.0.1 | *A4B6157319038724E3560894F7F932C8886EBFCF |
| root | ::1       | *A4B6157319038724E3560894F7F932C8886EBFCF |
+------+-----------+-------------------------------------------+


创建表方法3  类似表
MariaDB [testdb]> desc employee
    -> ;
+--------+----------------------+------+-----+---------+-------+
| Field  | Type                 | Null | Key | Default | Extra |
+--------+----------------------+------+-----+---------+-------+
| id     | smallint(5) unsigned | NO   | PRI | NULL    |       |
| name   | char(30)             | YES  |     | NULL    |       |
| gender | char(1)              | YES  |     | m       |       |
| phone  | char(11)             | YES  |     | NULL    |       |
+--------+----------------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

MariaDB [testdb]> create table custom like employee;
Query OK, 0 rows affected (0.01 sec)

MariaDB [testdb]> desc custom;
+--------+----------------------+------+-----+---------+-------+
| Field  | Type                 | Null | Key | Default | Extra |
+--------+----------------------+------+-----+---------+-------+
| id     | smallint(5) unsigned | NO   | PRI | NULL    |       |
| name   | char(30)             | YES  |     | NULL    |       |
| gender | char(1)              | YES  |     | m       |       |
| phone  | char(11)             | YES  |     | NULL    |       |
+--------+----------------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

相关文章

网友评论

    本文标题:1. 数据库mysql

    本文链接:https://www.haomeiwen.com/subject/tewibktx.html