什么是MySQL?
MySQL是最流行的开源SQL数据库管理系统,由 Oracle 开发、分发和支持。
MySQL软件提供了一个非常快速,多线程,多用户,和强大的 SQL(结构化查询语言)数据库服务器。
MySQL 服务器适用于任务关键型重负载生产系统以及嵌入到大规模部署的软件中。
mysql是否适合容器化?在大厂里使用容器跑mysql的是否多?
Docker 不适合跑 MySQL 的原因
1.数据安全,容器被删数据也被删除
2.性能不好
3.资源隔离问题
4.docker的无状态属性
MySQL放入容器中的优点是什么?
1. 简化部署:容器可以在不同的环境中运行,使得部署变得更加简单。
2. 高可用性:容器可以自动创建和销毁,从而提高了应用程序的可用性。
3. 提高效率:容器可以在不同的环境中运行,从而提高了应用程序的效率。
MySQL放入容器中的缺点有以下几个方面:
1. 存储限制:容器的存储容量是有限制的,因此需要仔细考虑存储策略。
2. 网络限制:容器的网络带宽有限,因此需要考虑网络限制对应用程序的影响。
3. 安全问题:容器的安全性需要仔细考虑,防止容器被攻击。
编译安装的优缺点?
好处:平台无关、安装的 MySQL 目录独立(方便清楚),据说有更好的性能和平台耦合
缺点: 编译安装较慢
商业版(commercial)
企业版(MySQL Enterprise Edition)
标准版(MySQL Standard Edition)
集群(MySQL Cluster)
社区版(Community)
mysql的两个大版本
8.0.31
5.7.41
关系型数据库和非关系型数据库
关系型数据库:mysql,mariaDB,Oracle,mssql,postgresql,db2,informix等
表格
id name age sex
可以理解为不同的表之间的列(字段)可以联系(外键)非关系型数据库:mongodb,elasticserach,redis,tidb等
centos7/8/9里的默认数据库mariadb,postgre SQL
国家推行:数据库国产化
1.万里数据库 --》基于mysql的二次开发的分布式数据库
2.极数云舟
3.阿里的oceanbase
4.人大金仓
5.TiDB
6.达梦
神舟通用
科蓝软件
优炫软件
瀚高软件
国内数据库的发展趋势
为什么学习mysql?
1.国内群众基础好(生态好),技术人员多
2.开源并且免费版本
什么是OLTP 和 OLAP?
OLTP 英文全称是 On-Line Transaction Processing,联机事务处理过程。
OLAP 英文全称是 Online Analytical Processing,联机分析处理。
图数据库
Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。
它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。
Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。
程序员工作在一个面向对象的、灵活的网络结构下而不是严格、静态的表中,但是他们可以享受到具备完全的事务特性、企业级的数据库的所有好处。
优势
嵌入式、高性能、轻量级
TigerGraph是图数据库领域为数不多的拥有分布式能力的图原生数据库。
二进制版本的安装
第一步:去MySQL官网下载源码包并且上传到Linux里
[root@mysql mysql]# ls
mysql-5.7.41-linux-glibc2.12-x86_64.tar.gz
第二步:编写MySQL安装脚本
[root@mysql mysql]# cat install_mysql.sh
#!/bin/bash
#安装相关依赖
yum install cmake ncurses-devel gcc gcc-c++ vim lsof bzip2 openssl-devel ncurses-compat-libs -y
#解压mysql二进制安装包
tar xf mysql-5.7.41-linux-glibc2.12-x86_64.tar.gz
#移动解压后的文件到/usr/local下改名叫mysql
mv mysql-5.7.41-linux-glibc2.12-x86_64 /usr/local/mysql
#新建组和用户mysql
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
#新建存放数据的目录
mkdir /data/mysql -p
#修改/data/mysql目录的权限归mysql用户和mysql组所有
chown mysql:mysql /data/mysql/
chmod 750 /data/mysql/
#进入/usr/local/mysql/bin目录
cd /usr/local/mysql/bin/
#初始化mysql
./mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql &>passwd.txt
#获得临时密码
tem_passwd=$(cat passwd.txt |grep "temporary"|awk '{print $NF}')
#临时修改PATH变量的值
export PATH=/usr/local/mysql/bin/:$PATH
#复制support-files里的mysql.server文件到/etc/init.d/目录下叫mysqld
cp ../support-files/mysql.server /etc/init.d/mysqld
#修改/etc/init.d/mysqld脚本文件里的datadir目录的值
sed -i '70c datadir=/data/mysql' /etc/init.d/mysqld
#生成/etc/my.cnf配置文件
cat >/etc/my.cnf <<EOF
[mysqld_safe]
[client]
socket=/data/mysql/mysql.sock
[mysqld]
socket=/data/mysql/mysql.sock
port = 3306
open_files_limit = 8192
innodb_buffer_pool_size = 512M
character-set-server=utf8
[mysql]
auto-rehash
prompt=\\u@\\d \\R:\\m mysql>
EOF
#修改内核的open file
echo "ulimit -n 1000000" >>/etc/rc.local
chmod +x /etc/rc.d/rc.local
#启动mysqld进程
service mysqld start
#将mysqld添加到linux系统里服务管理名单里
/sbin/chkconfig --add mysqld
#设置mysqld服务开机启动
/sbin/chkconfig mysqld on
#初次修改密码需要使用--connect-expired-password 选项 修改root用户的密码为Sanchuang123#
mysql -uroot -p$tem_passwd --connect-expired-password -e "set password='Sanchuang123#';"
#检验修改密码是否成功,如果有输出能看到mysql里的数据库,说明成功。
mysql -uroot -p'Sanchuang123#' -e "show databases;"
第三步:执行脚本
[root@mysql mysql]# bash install_mysql.sh
第四步:进入mysql
[root@mysql mysql]# mysql -uroot -p'your passwd'
-bash: mysql: 未找到命令
[root@mysql mysql]# su - root
上一次登录:一 4月 17 18:23:30 CST 2023从 192.168.102.1pts/1 上
[root@mysql ~]# mysql -uroot -p'your passwd'
mysql: [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 5
Server version: 5.7.41 MySQL Community Server (GPL)
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
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.
root@(none) 18:32 mysql>
查看MySQL是否启动
# 查看进程
[root@mysql mysql]# ps aux|grep mysql
root 18402 0.0 0.0 11824 1612 pts/0 S 18:25 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/mysql.pid
mysql 18556 0.2 11.0 1610260 205260 pts/0 Sl 18:25 0:01 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-errormysql.err --open-files-limit=8192 --pid-file=/data/mysql/mysql.pid --socket=/data/mysql/mysql.sock --port=3306
root 18693 0.0 0.1 136088 3380 pts/0 S+ 18:32 0:00 mysql -uroot -px xxxxxxxxxxx
root 18697 0.0 0.0 112828 988 pts/1 S+ 18:34 0:00 grep --color=auto mysql
# 查看端口号
[root@mysql mysql]# netstat -anplut|grep mysql
tcp6 0 0 :::3306 :::* LISTEN 10387/mysqld
tcp6 0 0 192.168.102.139:3306 192.168.102.1:60719 ESTABLISHED 10387/mysqld
# 查看服务状态
[root@mysql mysql]# systemctl status mysqld
● mysqld.service - LSB: start and stop MySQL
Loaded: loaded (/etc/rc.d/init.d/mysqld; bad; vendor preset: disabled)
Active: active (running) since 六 2023-07-22 15:22:47 CST; 5h 31min ago
Docs: man:systemd-sysv-generator(8)
Process: 6641 ExecStart=/etc/rc.d/init.d/mysqld start (code=exited, status=0/SUCCESS)
Tasks: 32
Memory: 272.5M
CGroup: /system.slice/mysqld.service
├─6663 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/slave...
└─6996 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/...
7月 22 15:22:43 slave systemd[1]: Starting LSB: start and stop MySQL...
7月 22 15:22:47 slave mysqld[6641]: Starting MySQL.... SUCCESS!
7月 22 15:22:47 slave systemd[1]: Started LSB: start and stop MySQL.
初始化mysql时会生成一个临时密码,所以需要重定向到一个文件,用来保存密码。
./mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql &>passwd.txt
[root@mysql bin]# cat passwd.txt
2022-09-11T09:05:55.612847Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explici
2022-09-11T09:05:55.818309Z 0 [Warning] InnoDB: New log files created, LSN=45790
2022-09-11T09:05:55.858439Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2022-09-11T09:05:55.935156Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time
2022-09-11T09:05:55.936738Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be
2022-09-11T09:05:56.881521Z 0 [Warning] A deprecated TLS version TLSv1 is enabled. Please use TLSv1.2 or higher.
2022-09-11T09:05:56.881537Z 0 [Warning] A deprecated TLS version TLSv1.1 is enabled. Please use TLSv1.2 or higher
2022-09-11T09:05:56.882484Z 0 [Warning] CA certificate ca.pem is self signed.
2022-09-11T09:05:57.392415Z 1 [Note] A temporary password is generated for root@localhost: #r!+-0kV_tFy
# root@localhost MySQL里的超级用户root只能在本地登录
chkconfig (比较老式的用法):设置服务开机启动
[root@mysql mysql]# chkconfig --list
注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。
要列出 systemd 服务,请执行 'systemctl list-unit-files'。
查看在具体 target 启用的服务请执行
'systemctl list-dependencies [target]'。
mysqld 0:关 1:关 2:开 3:开 4:开 5:开 6:关
netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关
network 0:关 1:关 2:开 3:开 4:开 5:开 6:关
[root@mysql mysql]# runlevel
N 3
卸载mysql的脚本
[root@mysql mysql]# cat uninstall_mysql.sh
#!/bin/bash
#停止mysqld服务
service mysqld stop
#删除用户
userdel -r mysql
#删除数据目录和base目录
rm -rf /usr/local/mysql
rm -rf /data/
rm -rf /etc/init.d/mysqld
rm -rf /etc/my.cnf
bash uninstall_mysql.sh