一,数据库简介
数据库管理系统(Database Management System),操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS
数据库系统(Database System),是由数据库及其管理软件组成的系统
常用的数据库分为两大类
1,关系数据库:这种类型的数据库是最古老的数据库类型,关系型数据库模型是把复杂的数据结构归结为简单的二元关系(即二维表格形式)
PS:在关系型数据库中,对数据的操作几乎全部建立在一个或多个关系表格上。在大型系统中通常有多个表,且表之间有各种关系。实际使用就是通过对这些关联的表格分类、合并、连接或选取等运算来实现数据库的管理。
2,非关系数据库
--Redis、MongoDB最常见
Redis通常最为普通关系型数据库的缓存层,用于降低数据库的访问压力,提升系统性能。
MongoDB 非关系型数据库(nosql ),属于文档型数据库,可以存放xml、json、bson类型系的数据,据结构由键值(key=>value)对组成。
其最大的特点是分布式部署,可以随着负载的增大动态扩容,从而满足企业业务增长的需求。
MySQL与Redis区别:
1,MySQL是关系型数据库,主要用于存放持久化数据,将数据存储在硬盘中,读取速度较慢。
Redis是NOSQL,即非关系型数据库,也是缓存数据库,即将数据存储在缓存中,缓存的读取速度快,能够大大的提高运行效率,但是保存时间有限。
2,
mysql作为持久化存储的关系型数据库,相对薄弱的地方在于每次请求访问数据库时,都存在着I/O操作,如果反复频繁的访问数据库。第一:会在反复链接数据库上花费大量时间,从而导致运行效率过慢;第二:反复的访问数据库也会导致数据库的负载过高,那么此时缓存的概念就衍生了出来。
缓存就是数据交换的缓冲区(cache),当浏览器执行请求时,首先会对在缓存中进行查找,如果存在,就获取;否则就访问数据库。缓存的好处就是读取速度快。
redis数据库就是一款缓存数据库,用于存储使用频繁的数据,这样减少访问数据库的次数,提高运行效率。
3,mysql用于持久化的存储数据到硬盘,功能强大,但是速度较慢。
redis用于存储使用较为频繁的数据到缓存中,读取速度快。
二,yum源安装mysql
1,准备yum源
[root@stars ~]# vim /etc/yum.repos.d/mysql-community.repo
[mysql56-community]
name=MySQL 5.6 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/6/$basearch/
enabled=1
gpgcheck=0
2,测试mysql相关软件包
[root@stars ~]# yum repolist enabled | grep mysql
mysql56-community/x86_64 MySQL 5.6 Community Server
3,安装
[root@stars ~]# yum install -y mysql-community-server
4,启动服务
[root@stars ~]# systemctl start mysqld
5,查看是否启动成功
[root@stars ~]# ps -ef | grep mysqld
root 7801 1 0 14:13 ? 00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql
mysql 8005 7801 5 14:13 ? 00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock
root 8033 7526 0 14:13 pts/0 00:00:00 grep --color=auto mysqld
PS:
有两个进程 守护进程是root用户 另一个为工作进程(可查看相关路径)
[root@stars ~]# ls /var/lib/mysql/mysql/
columns_priv.frm innodb_index_stats.frm slave_worker_info.ibd
columns_priv.MYD innodb_index_stats.ibd slow_log.CSM
columns_priv.MYI innodb_table_stats.frm slow_log.CSV
db.frm innodb_table_stats.ibd slow_log.frm
db.MYD ndb_binlog_index.frm tables_priv.frm
db.MYI ndb_binlog_index.MYD tables_priv.MYD
event.frm ndb_binlog_index.MYI tables_priv.MYI
event.MYD plugin.frm time_zone.frm
event.MYI plugin.MYD
... ...
.frm后缀,记录表结构
.MYD后缀,实时存储的数据
.MYI后缀,mysql表相关索引文件
三,源码安装mysql
image.png
1,下载软件包
https://downloads.mysql.com/archives/community/
2,上传
[root@stars ~]# ll
-rw-r--r-- 1 root root 32395002 Mar 2 10:10 mysql-5.6.46.tar.gz
3,安装依赖包
[root@stars ~]# yum install -y ncurses-devel libaio-devel gcc gcc-c++ glibc cmake autoconf openssl openssl-devel
4,解压到指定目录下
[root@stars ~]# tar -xf mysql-5.6.46.tar.gz
PS:
如果要加压到指定目录下,可加选项-C,
比如-C /usr/local/,指定解压到比如 /usr/local/下
5,创建目录
[root@stars ~]# mkdir /service
6,准备编译环境
[root@stars ~]# cd /mysql-5.6.46/
[root@stars mysql-5.6.46]#
cmake . -DCMAKE_INSTALL_PREFIX=/service/mysql-5.6.46 \
-DMYSQL_DATADIR=/service/mysql-5.6.46/data \
-DMYSQL_UNIX_ADDR=/service/mysql-5.6.46/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_ZLIB=bundled \
-DWITH_SSL=system \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLE_DOWNLOADS=1 \
-DWITH_DEBUG=0
cmake . - DCMAKE_INSTALL_PREFIX=/service/mysql-5.6.46 \ 程序存放的位置
-DMYSQL_DATADIR=/service/mysql-5.6.46/data \ 数据的存放位置
-DMYSQL_UNIX_ADDR=/service/mysql-5.6.46/tmp/mysql.sock \ socket文件存放位置(多实例中用来开启服务)
7,编译 make
[root@stars mysql-5.6.46]# make
8,编译安装
[root@stars mysql-5.6.46]# make install
9,做软连接
[root@stars ~]# ln -s /service/mysql-5.6.46 /service/mysql
10,创建用户及用户组
[root@stars ~]# useradd mysql -s /bin/bash -M
11,复制配置文件(如果/etc/my.cnfC本身存在,删除即可)
[root@stars ~]# cd /service/mysql/support-files/
[root@stars support-files]# cp my-default.cnf /etc/my.cnf
12,配置system管理MySQL服务(可用systemctl开启关闭mysql服务)
[root@stars ~]# vim /usr/lib/systemd/mysql.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=https://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/service/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000
重新加载启动文件配置
[root@stars ~]# systemctl daemon-reload
13,初始化数据库
[root@stars ~]# cd /service/mysql/scripts/
[root@stars scripts]# ./mysql_install_db --user=mysql --basedir=/service/mysql --datadir=/service/mysql/data
14,建立socket文件目录
[root@stars ~]# mkdir /service/mysql/tmp
15,授权
[root@stars ~]# chown -R mysql.mysql /service/
16,配置环境变量直接使用mysql
[root@stars ~]# vim /etc/profile.d/mysql.sh
#!/bin/bash
export PATH=/service/mysql/bin:$PATH
[root@stars ~]# source /etc/profile
17,连接数据库
[root@stars scripts]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.46 Source distribution
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
四,mysql自带连接命令及更改密码
mysql自带连接命令:
mysql -h --host; mysql -h 172.16.1.51
mysql -P --port; mysql -h 172.16.1.51 -P 3306
mysql -u --user; mysql -h 172.16.1.51 -P 3306 -u root
mysql -p --password; mysql -h 172.16.1.51 -P 3306 -u root -p123
mysql -S --socket;
更改mysql的三种方式:
1,
mysql> set password=password('123456');
Query OK, 0 rows affected (0.00 sec)
2,
mysql> grant all privileges on *.* to root@'localhost' identified by '123';
Query OK, 0 rows affected (0.00 sec)
3,
[root@stars bin]# ./mysqladmin -uroot -p123 password 111
五,mysql服务构成
1,连接层
2,sql层
1)接收连接层传来的SQL语句
2)验证语法
3)解析器:解析你的SQL语句,生成多种执行计划
4)优化器:接收解析器传来的多种执行计划,选择最优的一种
5)执行器:将优化器选择出的最优的SQL,执行
5.1 建立一个与存储引擎层 交互的线程
5.2 将执行语句交给存储引擎层,取数据 接收存储引擎层,结构化成表的数据结果
6)如果你的前端有缓存,写缓存
7)记录日志(binlog)
3,存储引擎层
1)接收到SQL层传来的SQL语句
2)与磁盘交互,取数据,结构化成表的形式,返回给SQL层
3)建立一个与SQL层交互的线程
PS:
DBA主要职责在于第二部
mysql的结构类似计算机,硬件 -> 操作系统 -> 软件
六,多实例 部署流程
1,创建多个目录
[root@stars ~]# mkdir /data/{3307,3308,3309} -p
2,准备配置文件
[root@stars ~]# vim /data/3307/my.cnf
[mysqld]
basedir=/service/mysql
datadir=/data/3307/data
port=3307
socket=/data/3307/mysql.sock
log-error=/data/3307/data/mysql.err
log-bin=/data/3307/data/mysql-bin
server_id=7
[root@stars ~]# vim /data/3308/my.cnf
[mysqld]
basedir=/service/mysql
datadir=/data/3308/data
port=3308
socket=/data/3308/mysql.sock
log-error=/data/3308/data/mysql.err
log-bin=/data/3308/data/mysql-bin
server_id=8
[root@stars ~]# vim /data/3309/my.cnf
[mysqld]
basedir=/service/mysql
datadir=/data/3309/data
port=3309
socket=/data/3309/mysql.sock
log-error=/data/3309/data/mysql.err
log-bin=/data/3309/data/mysql-bin
server_id=9
3,初始化多个实例
[root@stars ~]# cd /service/mysql/scripts/
[root@stars scripts]# ./mysql_install_db --defaults-file=/data/3307/my.cnf --user=mysql --basedir=/service/mysql --datadir=/data/3307/data
[root@stars scripts]# ./mysql_install_db --defaults-file=/data/3308/my.cnf --user=mysql --basedir=/service/mysql --datadir=/data/3308/data
[root@stars scripts]# ./mysql_install_db --defaults-file=/data/3309/my.cnf --user=mysql --basedir=/service/mysql --datadir=/data/3309/data
4,修改目录的属主属组
[root@stars ~]# chown -R mysql.mysql /data
[root@stars ~]# ll /service
lrwxrwxrwx 1 mysql mysql 21 Mar 1 12:44 mysql -> /service/mysql-5.6.46
drwxr-xr-x 3 mysql mysql 18 Mar 3 15:33 mysql3307
drwxr-xr-x 3 mysql mysql 18 Mar 3 15:33 mysql3308
drwxr-xr-x 3 mysql mysql 18 Mar 3 15:33 mysql3309
drwxr-xr-x 13 mysql mysql 223 Mar 1 16:19 mysql-5.6.
5,启动数据库
[root@stars scripts]# mysqld_safe --defaults-file=/data/3307/my.cnf &
[root@stars scripts]# mysqld_safe --defaults-file=/data/3308/my.cnf &
[root@stars scripts]# mysqld_safe --defaults-file=/data/3309/my.cnf &
注意:开启服务可能会有报错如下
[root@stars scripts]# mysqld_safe --defaults-file=/data/3309/my.cnf &
[1] 26597
[root@stars scripts]# 210304 11:09:08 mysqld_safe Logging to '/data/3309/data/mysql.err'.
210304 11:09:08 mysqld_safe Starting mysqld daemon with databases from /data/3309/data
210304 11:09:08 mysqld_safe mysqld from pid file /data/3309/data/stars.z.pid ended
可能是内存不足导致,增加内存再次尝试启动服务
6,都已成功开启服务
[root@stars scripts]# ps -ef | grep 330
root 24622 24318 0 12:50 pts/1 00:00:00 /bin/sh /service/mysql/bin/mysqld_safe --defaults-file=/data/3309/my.cnf
mysql 24772 24622 0 12:51 pts/1 00:00:01 /service/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf --basedir=/service/mysql --datadir=/data/3309/data --plugin-dir=/service/mysql/lib/plugin --user=mysql --log-error=/data/3309/data/mysql.err --pid-file=stars.z.pid --socket=/data/3309/mysql.sock --port=3309
root 24794 24318 0 12:51 pts/1 00:00:00 /bin/sh /service/mysql/bin/mysqld_safe --defaults-file=/data/3308/my.cnf
mysql 24944 24794 0 12:51 pts/1 00:00:00 /service/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf --basedir=/service/mysql --datadir=/data/3308/data --plugin-dir=/service/mysql/lib/plugin --user=mysql --log-error=/data/3308/data/mysql.err --pid-file=stars.z.pid --socket=/data/3308/mysql.sock --port=3308
root 25243 24318 0 12:56 pts/1 00:00:00 /bin/sh /service/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf
mysql 25393 25243 19 12:56 pts/1 00:00:01 /service/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf --basedir=/service/mysql --datadir=/data/3307/data --plugin-dir=/service/mysql/lib/plugin --user=mysql --log-error=/data/3307/data/mysql.err --pid-file=stars.z.pid --socket=/data/3307/mysql.sock --port=3307
root 25416 24318 0 12:56 pts/1 00:00:00 grep --color=auto 330
7,多实例密码设置
[root@stars scripts]# mysqladmin -uroot -S /data/3307/mysql.sock password '3307'
Warning: Using a password on the command line interface can be insecure.
[root@stars scripts]# mysqladmin -uroot -S /data/3308/mysql.sock password '3308'
Warning: Using a password on the command line interface can be insecure.
[root@stars scripts]# mysqladmin -uroot -S /data/3309/mysql.sock password '3309'
Warning: Using a password on the command line interface can be insecure.
8,验证
[root@stars scripts]# mysql -uroot -p3307 -S /data/3307/mysql.sock -e "show variables like 'server_id';"
Warning: Using a password on the command line interface can be insecure.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 7 |
+---------------+-------+
9,多实例连接脚本
[root@stars scripts]# vim /usr/bin/mysql3307
mysql -uroot -p3307 -S /data/3307/mysql.sock
授执行权限
[root@stars scripts]# chmod +x /usr/bin/m
10,连接数据库
[root@stars scripts]# /usr/bin/mysql3307
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.6.46-log Source distribution
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
11,断开多实例数据库(已设置数据库密码)
[root@stars scripts]# mysqladmin -uroot -p123 -S /data/3307/mysql.sock shutdown
网友评论