文章目录
MYSQL是否适合容器化
不适合。
1、数据安全,容器删除数据也被删除。
2、性能不好。
3、资源隔离问题
在一台机器上用容器启动mysql,还可以启别的容器。别的容器是可以访问mysql所在容器的资源。
4、docker的无状态属性
虚拟化(容器)的目的是减少资源消耗,节约成本。
The world’s most popular open source database
MYSQL官网
mysql已经被oracle收购。
商业版是收费的,社区版开源免费。
1、数据库类型
关系型数据库:
MYSQL、Oracle、SQL server、MSSQL、postgreSQL、DB2、informix
非关系型数据库:
redis、mongodb、TIDB、TSDB
关系型:表的字段之间、表之间有关系
非关系型:键值
国产数据库:TIDB、人大金仓、达梦、oceanbase(阿里)
国外数据库:MYSQL、Oracle、INFOMIX、DB2
2、安装
版本:5.7.34 二进制安装
商业版:收费
社区版:免费
5.7比较老(比较成熟、稳定)、5.8比较新
# 8.0.x版本
# 5.7.x版本 推荐使用,稳定
2.1 cemtos镜像下载
2.2 下载Mysql
官网下载 https://dev.mysql.com/downloads/mysql/
下载的是rpm包(.tar包里面有很多rpm结尾的文件),相当于windows里面的exe。
下载的是二进制安装包。
2.3 安装方式
rpm安装——专卖店买衣服
上传安装包到linux,解压,用yum命令安装,速度快。
解压安装,已经编译好了的。安装快,但是不能修改很多东西。
编译安装——裁缝店做衣服
速度慢,所有代码都需要编译。
但是可以修改很多东西,个性化定制,开启很多功能,指定安装路径
二进制安装
mysql是c语言开发的,要编译成二进制程序才能运行。
可以通过修改配置文件来定制功能,安装速度快(结合了rpm和编译安装的优点)
2.4 安装步骤
官方安装文档—— https://dev.mysql.com/doc/refman/5.7/en/binary-installation.html
1)上传解压压缩包
[root@master install_mysql]# tar xf mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz
[root@master install_mysql]# ls
mysql-5.7.33-linux-glibc2.12-x86_64 mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz
[root@master install_mysql]# cd mysql-5.7.33-linux-glibc2.12-x86_64
[root@master mysql-5.7.33-linux-glibc2.12-x86_64]# ls
bin docs include lib LICENSE man README share support-files
2)将解压后的文件夹移动到/usr/local下,改名为mysql
[root@master install_mysql]# mv mysql-5.7.33-linux-glibc2.12-x86_64 /usr/local/mysql
3)新建mysql用户和组,禁止登陆
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
4)关闭防火墙、selinnux,设置开机不启动
service firewalld stop
systemctl disable firewalld
setenforce 0
sed -i '/^SELINUX=/ s/enforcing/disabled/' /etc/selinux/config
5) 新建数据目录,修改权限
[root@master mysql]# mkdir /data/mysql -p
[root@master mysql]# chown mysql:mysql /data/mysql
[root@master mysql]# chown 750 /data/mysql
6)初始化mysql,让mysql支持ssl方式登陆 。设置环境变量
cd /usr/local/mysql/bin
./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
# 记住初始化是的登录密码
2022-04-13T19:13:48.559146Z 1 [Note] A temporary password is generated for root@localhost: *+sp.6xWt8?m
[root@master bin]# ./mysql_ssl_rsa_setup --datadir=/data/mysql
[root@master bin]# PATH=/usr/local/mysql/bin:$PATH # 临时修改环境变量
[root@master bin]# echo 'PATH=/usr/local/mysql/bin:$PATH' >>/root/.bashrc # 永久修改环境变量
[root@master bin]# export PATH=/usr/local/mysql/bin:$PATH #输出为全局变量,子进程也可以使用
7) 复制support-files里的mysql.server文件到/etc/init.d/目录下叫mysqld
修改/etc/init.d/mysqld脚本文件里的datadir目录的值
[root@master support-files]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@master support-files]# vim /etc/init.d/mysqld # 手动改
66 basedir=/usr/local/mysql
67 bindir=/usr/local/mysql/bin
68 if test -z "$datadir"
69 then
70 datadir=/data/mysql
[root@master support-files]# sed -i '70c datadir=/data/mysql' /etc/init.d/mysqld # 用命令改
8) 生成/etc/my.cnf配置文件,告诉mysql进程怎么运行
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
9)启动mysql,设置开机自启
[root@master ~]# service mysqld start
[root@master ~]# chkconfig --add mysqld #设置开机自启
[root@master ~]# systemctl enable mysqld # /sbin/chkconfig mysqld on真正设置开机自启的命令
mysqld.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig mysqld on
10)登录mysql,修改密码
[root@master ~]# mysql -uroot -p'*+sp.6xWt8?m'
...
root@(none) 03:44 mysql>set password='Sanchuang123#';
或
# 临时密码tem_passwd之前要定义好
mysql -uroot -p$tem_passwd --connect-expired-password -e "set password='Sanchuang123#';"
3、卸载和升级
卸载脚本
[root@MYSQL ~]# cat uninstall_mysql.sh
#!/bin/bash
# 停止mysqld服务
service mysqld stop
# 删除mysql用户
userdel -r mysql
# 删除数据目录和base目录
rm -rf /usr/local/mysql
rm -rf /data/
rm -rf /etc/init.d/mysqld
升级脚本
目前的办法:卸载后重新安装一遍,使用型的版本
后期深入了解后补充。
5、授权登录
MariaDB [(none)]> create user 'sc'@'%' identified by 'sc123456';
# 创建用户 用户名@从哪里远程登录(localhost 表示只允许本机登录、% 所有主机) 通过密码sc123456登录
Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> grant all on *.* to 'sc'@'%';
# 授予所有库.所有表的 所有权限给 sc用户 从任意主机登录过来
Query OK, 0 rows affected (0.00 sec)
6、安装客户端工具
windows
安装Navicat,配置连接
linux
[root@MYSQL ~]# which mysql
/usr/bin/mysql
[root@MYSQL ~]# rpm -qf /usr/bin/mysql
mariadb-10.3.28-1.module_el8.3.0+757+d382997d.x86_64
[root@MYSQL ~]# mysql -usc -p'123456' -h 192.168.169.143
设置其他主机可连接
UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='root';
FLUSH PRIVILEGES;
grant all privileges on *.* to 'sc'@'%' identified by 'Sanchuang123#' with grant option
flush privileges;
创建用户并设置密码、可以从哪些主机登录
root@(none) 15:04 mysql>create user 'sc'@'' identified by 'Sanchuang123#';
Query OK, 0 rows affected (0.00 sec)
root@(none) 15:05 mysql>create user 'sc'@'192.168.169.%' identified by 'Sanchuang123#';
Query OK, 0 rows affected (0.00 sec)
赋予所有权限(除了grant)给sc用户,在所有的库上操作所有的表(*.*);
root@mysql 15:11 mysql>grant all on *.* to 'sc'@'%';# 给sc用户赋权
Query OK, 0 rows affected (0.00 sec)
root@mysql 15:12 mysql>grant select on sanchuang.* to 'tang'@'%' identified by '123456'; # 给tang用户赋予sanchuang库的查询权限
Query OK, 0 rows affected, 1 warning (0.00 sec)
root@mysql 15:16 mysql>show warnings; # 查看警告
+---------+------+------------------------------------------------------------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------------------------------------------------------------------------------+
| Warning | 1287 | Using GRANT for creating new user is deprecated and will be removed in future release. Create new user with CREATE USER statement. |
+---------+------+------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
知道哪些用户登录了mysql
root@mysql 15:19 mysql>show processlist;
+----+------+-----------+-------+---------+------+----------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------+-------+---------+------+----------+------------------+
| 8 | root | localhost | mysql | Query | 0 | starting | show processlist |
+----+------+-----------+-------+---------+------+----------+------------------+
1 row in set (0.00 sec)
用户登录
[root@localhost ~]# mysql -usc -p'Sanchuang123#'
游标:在数据库里的一个缓存空间
db = pymysql.connect()
cursor = db.cursor()
cursor.execute()
data = cursor.fetchone()
data = cursor.fetchmany()
data = cursor.fetchall()
db.close()
事务:
一组操作组成一个事务;
事务有俩种结果: 成功或失败
建表建库是自动commit的,增删改是要手动commit的
commit:落盘,永久保存;
rollback:数据操作失败,回滚;
7、存储引擎
innodb 存储引擎的特点:
支持事务、支持行界别的锁;
支持外键;
root@(none) 11:42 mysql>show engines; # mysql默认的存储引擎:innodb
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)
存储引擎是和表捆绑在一起的,表本质就是一个文件;
字符集是和库捆绑在一起的,库本质就是一个文件;
四种存储引擎
memory
csv
innodb
myisam
建表时指定存储引擎