中间件mysql的学习和使用

mysql的安装

我们来做离线安装示范

1. 文件准备

首先找到网站,选择我们需要的版本:mysql下载网站
在这里插入图片描述
这里就会发现,不仅版本多,而且,如果我们只知道我们是linux操作机还不行,还要知道发行版本,这里提供一个最简单的查询:cat /proc/version
在这里插入图片描述
注:el7.x86_64就是代表centos 7.X 版本 架构是x86 64位

选择linux版本和mysql版本(这里linux就选的是centos7的,也就是redhat版。mysql版本选择需要点击Archives 进入选择,这里我们选择8.0.13)
点击Download按钮,进入到下载页面,选择不登陆直接下载:
在这里插入图片描述
右键选择拷贝链接地址。

使用wget 下载到本地(下载RPM Bundle这个版本,直接都是rmp包,直接解压使用就可以了:https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.13-1.el7.x86_64.rpm-bundle.tar
在这里插入图片描述

2. 环境准备

首先需要检查当前环境是不是有历史版本,然后需要删除
创建一个mysql的用户,并且把目录什么的都创建好:

# 如果检查到有历史版本就卸载了
[root@k8s ~]# rpm -qa | grep mariadb
mariadb-libs-5.5.65-1.el7.x86_64
# 如果没有历史版本,就跳过下一步卸载操作
[root@k8s ~]# rpm -e mariadb-libs-5.5.65-1.el7.x86_64 --nodeps
# 增加用户和密码
[root@k8s ~]# useradd mysql
[root@k8s ~]# passwd mysql
更改用户 mysql 的密码 。
新的 密码:
无效的密码: 密码未通过字典检查 - 它基于字典单词
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
# 创建路径和修改权限
[root@k8s ~]# mkdir -p /usr/local/mysql/mysqldb
[root@k8s ~]# chmod -R 755 /usr/local/mysql
[root@k8s ~]# chown -R mysql:mysql /usr/local/mysql
[root@k8s ~]# ll /usr/local/mysql/
总用量 4
drwxr-xr-x 2 mysql mysql 4096 322 16:56 mysqldb
# 将下载好的文件解压
[root@k8s mysql]# tar xvf mysql-8.0.13-1.el7.x86_64.rpm-bundle.tar 
mysql-community-client-8.0.13-1.el7.x86_64.rpm
mysql-community-embedded-compat-8.0.13-1.el7.x86_64.rpm
mysql-community-libs-8.0.13-1.el7.x86_64.rpm
mysql-community-server-8.0.13-1.el7.x86_64.rpm
mysql-community-common-8.0.13-1.el7.x86_64.rpm
mysql-community-devel-8.0.13-1.el7.x86_64.rpm
mysql-community-test-8.0.13-1.el7.x86_64.rpm
mysql-community-libs-compat-8.0.13-1.el7.x86_64.rpm

3. 进行安装

解压后会有很多rmp包,我们只需要安装4个:
安装common,安装libs,安装client,安装server

[root@k8s mysql]# rpm -ivh mysql-community-common-8.0.13-1.el7.x86_64.rpm --nodeps --force
警告:mysql-community-common-8.0.13-1.el7.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:mysql-community-common-8.0.13-1.e################################# [100%]
[root@k8s mysql]# rpm -ivh mysql-community-libs- --nodeps --force
mysql-community-libs-8.0.13-1.el7.x86_64.rpm         mysql-community-libs-compat-8.0.13-1.el7.x86_64.rpm  
[root@k8s mysql]# rpm -ivh mysql-community-libs-8.0.13-1.el7.x86_64.rpm --nodeps --force
警告:mysql-community-libs-8.0.13-1.el7.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:mysql-community-libs-8.0.13-1.el7################################# [100%]
[root@k8s mysql]# rpm -ivh mysql-community-client-8.0.13-1.el7.x86_64.rpm --nodeps --force
警告:mysql-community-client-8.0.13-1.el7.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:mysql-community-client-8.0.13-1.e################################# [100%]
[root@k8s mysql]# rpm -ivh mysql-community-server-8.0.13-1.el7.x86_64.rpm --nodeps --force
警告:mysql-community-server-8.0.13-1.el7.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:mysql-community-server-8.0.13-1.e################################# [100%]

# 查看已安装的mysql安装包
rpm -qa | grep mysql
mysql-community-common-8.0.13-1.el7.x86_64
mysql-community-libs-8.0.13-1.el7.x86_64
mysql-community-server-8.0.13-1.el7.x86_64
mysql-community-client-8.0.13-1.el7.x86_64

4. 数据库的配置

# 初始化mysql,并查看初始化的登录密码,这个很重要,后面会用的
[root@k8s mysql]# mysqld --initialize
[root@k8s mysql]# cat /var/log/mysqld.log | grep password
2021-03-22T09:35:35.828072Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: lw<x_y=6autC

# 启动mysql服务
# 接下来先切换到root用户进行操作
[root@k8s mysql]# systemctl start mysqld.service
Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.
# 设置开机自启
[root@k8s mysql]# systemctl enable mysqld
# 尝试连接mysql,并用初始的密码登录(lw<x_y=6autC),然后在修改密码,方便记忆的密码
[root@k8s mysql]# mysql -uroot -p
Enter password: 
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
# 但是发现出现问题,因为我们这个/var/lib/mysql路径的权限不对,我们需要修改权限:
[root@k8s mysql]# ll /var/lib/mysql
总用量 155712
-rw-r----- 1 root  root        56 322 17:35 auto.cnf
-rw-r----- 1 mysql mysql        0 322 17:36 binlog.index
-rw------- 1 root  root      1676 322 17:35 ca-key.pem
-rw-r--r-- 1 root  root      1112 322 17:35 ca.pem
....# 这里省略具体内容
# 修改权限后,重启启动才行
[root@k8s mysql]#  chown -R mysql:mysql /var/lib/mysql
[root@k8s mysql]# systemctl restart mysqld.service

[root@k8s mysql]# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor Commands end with 
Server version: 8.0.13
...
mysql> 
# 注意,这里默认会把mysql的启动配置文件放在这个目录下:/etc/my.cnf,如果需要修改,可以修改后再重启

5. 最后就是进行密码重设和远程访问权限

# 这里需要先登录mysql的库,然后再远程修改,但是发现他要我们先进行密码重设
mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
# 密码重设,我们这里重设密码为root
mysql> ALTER USER USER() IDENTIFIED BY 'root';
Query OK, 0 rows affected (0.06 sec)
# 退出用新密码登录试试:
[root@k8s mysql]# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor Commands end with 
Server version: 8.0.13
...
mysql> 
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)
#可以登录了,接下来进行修改远程访问mysql的权限,因为mysql默认是只允许127.0.0.1访问
mysql> use mysql;
mysql> select host,user from user where user='root';
+-----------+------+
| host      | user |
+-----------+------+
| localhost | root |
+-----------+------+
1 row in set (0.00 sec)
# 更新权限操作,修改用户root 的 host 属性值为 %
mysql> update user set host='%' where user='root';
Query OK, 1 row affected (0.05 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> select host,user from user where user='root';
+------+------+
| host | user |
+------+------+
| %    | root |
+------+------+
1 row in set (0.00 sec)
# 把所有数据库的所有表的所有权限赋值给所有IP地址的root用户
mysql> grant all privileges on *.* to root@'%';
Query OK, 0 rows affected (0.00 sec)

至此,mysql就可以对外提供服务了,mysql安装完毕。8版本和以前的版本在修改权限问题也不太一样,具体报错直接查询然后更换新的命令就可以。

mysq遇到的问题

mysql客户端对象创建的问题

1.最近发现一个同事遗留的bug,mysql数据经常的写入不成功,但是我手动点击接口却可以,后来检查代码发现接口调用的时候,只关闭了cursor,并没把db关闭,这样就会导致某个时间段,请求过多,数据获取后不释放;连接资源,导致mysql不再接收其他请求。而我后面手动点击的时候,mysql因为超时自动释放连接才空余下来可用的连接。
mysql处理流程:
在这里插入图片描述

磁盘空间满了扩容重启失败

在mysql/data 下有很多mysql保存用的数据,其中有一个文件:master-bin.index文件
这个文件是记录mysql当前保存了多少数据文件,当mysql重启的时候,它会先去读这个文件,相当于这个文件是一个索引,然后他把这个索引指向的所有具体的mysql-bin.0000**的文件加载进来。
但是因为磁盘不够了,或者是什么原因,我们的mysql-bin.000055这个文件还没创建,但是master-bin.index文件已经记录了这个信息,因此当mysql进程启动的时候,加载到这个文件发现这个文件没了,那么mysql就会打印报错日志:
在这里插入图片描述

mysqld: File './mysql-bin.000055' not found (Errcode: 2 - No such file or directory)
2021-03-11T10:30:11.400018Z 0 [ERROR] Failed to open log (file './mysql-bin.000055', errno 2)
2021-03-11T10:30:11.400025Z 0 [ERROR] Could not open log file
2021-03-11T10:30:11.400029Z 0 [ERROR] Can't init tc log
2021-03-11T10:30:11.400033Z 0 [ERROR] Aborting

此时只需要打开master-bin.index文件,并且删除这一行内容./mysql-bin.000055就行(一般在最后一行,因为信息是逐行增加的)

写入数据失败

INSERT INTOjob(create_time,del,start_time,name) VALUES ('2021-09-28 17:25:40',0,'0000-00-00 00:00:00','cost-syncbillbymonth-20210928172540')
error: Error 1292: Incorrect datetime value: ‘0000-00-00’ for column ‘start_time’
是因为默认mysql是不可以写入0000-00-00这种日期的。可以通过修改参数来更新设置
查看全局sql_mode:
select @@global.sql_mode;
在这里插入图片描述
修改全局sql_mode:
set @@global.sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

其实就是将查询到的结果拷贝一下,然后去掉 NO_ZERO_IN_DATE,NO_ZERO_DATE
这样就满足了

当然,也可以只修改某个表,而不是全局修改:
查看当前sql_mode:select @@sql_mode;

修改当前sql_mode:set @@sql_mode = 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值