跳至主要內容

mysql

wangdx大约 7 分钟

网址参考

MySQL 查询数据库中表名、表注释、字段名、字段类型、字段注释open in new window

mysql 中将查询结果进行拼接处理及 concat、group_concat 的使用open in new window

解决 mysql 允许执行 XA RECOVER 语句(atomikos 解决分布式事务报错)open in new window

MySQL 权限介绍)open in new window

Mysql 查看连接数(连接总数、活跃数、最大并发数)open in new window

linux 安装多版本 MySQLopen in new window

MySQL8 初始化、账户创建及权限分配open in new window

centos 安装

## ① 在 CentOS 9 下,安装 MySQL 8.4 版本的软件源 https://dev.mysql.com/downloads/repo/yum/
rpm -Uvh https://repo.mysql.com//mysql84-community-release-el9-1.noarch.rpm

## ② 安装 MySQL Server 8.4 版本
yum install mysql-server --nogpgcheck

## ③ 查看 MySQL 的安装版本。结果是 /usr/sbin/mysqld  Ver 8.4.2 for Linux on x86_64 (MySQL Community Server - GPL)
mysqld --version


## 修改 /etc/my.cnf 文件,在文末加上 lower_case_table_names=1 配置,执行 systemctl restart mysqld 命令重启。

## 执行 grep password /var/log/mysqld.log 命令,获得 MySQL 临时密码。
2024-09-26T01:51:44.277843Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: iLXXg3.tje;8

## ① 连接 MySQL Server 服务,并输入临时密码
mysql -uroot -p

## ② 修改密码,3WLiVUBEwTbvAfsh. 可改成你想要的密码
alter user 'root'@'localhost' identified by '3WLiVUBEwTbvAfsh.';

## ③ 设置允许远程连接
use mysql;
update user set host = '%' where user = 'root';
FLUSH PRIVILEGES;

## ① 安装 Redis
yum install redis

## ② 查看 Redis 的安装版本。结果是 Redis server v=6.2.7 sha=00000000:0 malloc=jemalloc-5.1.0 bits=64 build=ec192bdd77ecd321
redis-server --version

## ④ 启动 Redis 服务
systemctl restart redis


执行 yum install -y java-1.8.0-openjdk 命令,安装 OpenJDK 8。

## 添加 yum 源
yum install epel-release
yum update
## 安装 nginx
yum install nginx
## 启动 nginx
nginx

ubuntu 安装 mysql

//根据官网内容说的大概意思就是不能安装完了修改忽略大小写了,只能在初始化的时候做修改。我用的版本是8.0.39

wget https://repo.mysql.com/mysql-apt-config_0.8.32-1_all.deb

sudo dpkg -i mysql-apt-config_0.8.32-1_all.deb

ls /etc/apt/sources.list.d
sudo apt-get update

sudo apt-get install mysql-server

//更新软件包
1、sudo apt update

//安装MySQL 如果安装了可以忽略这个步骤
2、sudo apt install -y mysql-server

//编辑mysqld.cnf文件
3、sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

//将这一行放入[mysqld]节点下 保存
4、lower_case_table_names=1

//备份配置文件
5、sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf.backup

 //卸载mysql
6、sudo apt --purge autoremove mysql-server

//删除安装目录
7、sudo rm -rf /var/lib/mysql

//还原配置文件
8、sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf.backup /etc/mysql/mysql.conf.d/mysqld.cnf

//重新安装mysql
9、sudo apt-get install mysql-server

mysql -uroot -p

 status;
 use mysql;
 update user set host ='%' where user ='root';
service mysql restart

mysql8 彻底卸载

##备份数据库(可选)
sudo mysqldump --all-databases > mysql_backup.sql

## 停止 MySQL 服务

sudo systemctl stop mysql

##  卸载 MySQL 相关包 此命令会删除 MySQL 的核心包及其配置文件

sudo apt purge mysql-apt-config  mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-*

## 删除 MySQL 数据目录和配置文件

sudo rm -rf /etc/mysql /var/lib/mysql /var/log/mysql

## 清理依赖包

sudo apt autoremove && sudo apt autoclean

## 删除 MySQL 用户(可选)

sudo userdel -r mysql

## 检查是否彻底卸载

dpkg --get-selections | grep mysql

注意事项 在删除 /var/lib/mysql 和 /etc/mysql 之前,请确保已备份重要数据,因为这些操作会永久删除所有 MySQL 数据。 如果在卸载过程中遇到问题,可以尝试手动删除残留的 MySQL 文件或运行 sudo dpkg --configure -a 来修复中断的包。

mysql8 安装配置


 /usr/local/mysql/mysql8/bin/mysqld --defaults-file=/usr/local/mysql/mysql8/my.cnf --user=mysql --initialize --console

#【本地系统】将 MySQL开发包上传到 Linux 系统之中,保存路径“/srv/ftp”,此时的完整路径:
/srv/ftp/mysq1-8.0.30-linux-glibc2.12-x86 64.tar.xz
#2【UBuntu 系统】当前的 MySQL 采用的是 XZ 压缩包的形式保存的,所以首先需要进行解压缩处理,解压缩为 tar 文件。
#程序执行结果:得到“mysql-8.0.36-linux-glibc2.28-x86_64.tar”文件
xz -d mysql-8.0.36-linux-glibc2.28-x86_64.tar.xz
#【UBuntu 系统】将 mysql-8.0.36-linux-glibc2.28-x86_64.tar 文件解压缩到“/usr/local”目录之中:
tar xvf /srv/ftp/mysql-8.0.30-linux-glibc2.12-x86_64.tar -C /usr/local/
#【UBuntu 系统】为了后续的配置方便进行目录更名处理:
mv /usr/local/mysql-8.0.30-linux-glibc2.12-x86/ /usr/local/mysql
#【UBuntu 系统】如果要想在系统中使用 MySQL数据库,需要创建一个名称为 mysql 的用户组。
groupadd mysql
#【UBuntu 系统】在“mysql”用户组里面创建“mysql”用户。
useradd -r -g mysql -s /bin/false mysql
#【UBuntu 系统】设置 mysql用户组下的 mysql 用户对目录的所有权:
chown -R mysql:mysql ./
#【UBuntu 系统】MySQL里面是需要提供有数据目录的,而这个数据目录建议放在“/mnt”(数据盘)
mkdir -p /mnt/data/mysql/{db,logs}
#【UBuntu 系统】查看 MySQL数据目录结构
tree /mnt/data/mysql
#10、【UBuntu 系统】对 MySQL的数据目录进行授权
chmod -R 777 /mnt/data/mysql/
#10、my.cnf配置文件
vim /etc/my.cnf
#12、【UBuntu 系统】进行 MySQL数据库的安装
/usr/local/mysql/bin/mysqld --user=mysql --initialize --console

[Server] A temporary password is generated for root@localhost: U=-;u6stZ%.h
[Warning] [MY-013360] [Server] Plugin mysql_native_password reported: ''mysql_native_password' is deprecated and will be removed in a future release. Please use caching_sha2_password instead'
#13、【UBuntu 系统】考虑到后续的处理方便,执行几条基本命令
#MySQL 授权:
chmod -R 777 /usr/local/mysql/
#创建日志文件:
echo "">/mnt/data/mysql/logs/mysql.log
#创建进程标记:
echo "">/mnt/data/mysql/mysql.pid
#日志文件授权:
chown -R mysql:mysql /mnt/data/mysql/logs/mysql.log
#14、【UBuntu 系统】以后台服务的方式,启动 MySQL服务进程:
/usr/local/mysql/bin/mysqld_safe --user=root > /dev/null 2>&1 &

119003

#15、【UBuntu 系统】查看当前的 MySQL 进程端口占用情况:
netstat -nptl
#16、【UBuntu 系统】在防火墙中配置 3306 访问规则:
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload

#17、【UBuntu 系统】为了后续的访问方便,将密码进行修改,首先使用 MySQL客户端进行服务登录:
/usr/local/mysql/bin/mysql -uroot -p'U=-;u6stZ%.h'


....
#18、【MySQL客户端】此时的 root 账户密码不是自己的,所以需要修改为“root”
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
程序执行结果:
Query OK,0 rows affected (0.01 sec)
#19、【MySQL客户端】此时的 root 账户只能够在本地登录,无法在远程登录,所以需要做一个权限的配置。
#切换数据库:
USE mysql;
#设置远程访问:
UPDATE user SET user.host='%' WHERE user.User='root';
#配置立即生效:
FLUSH PRIVILEGES;
........


#21、【UBuntu 系统】为了保证数据的安全性,可以为 MySQL的数据目录进行加密处理:
/usr/local/mysql/bin/mysql_ssl_rsa_setup --datadir=/mnt/data/mysql/db;
#22、【UBuntu 系统】此时的 MySQL 已经配置成功了,但是这样的服务启动过于繁琐了,所以可以考虑将其加入到系统服务之中幸运的是,
#MySQL内部提供了这样的配置支持,直接做出拷贝即可。
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
#22、【UBuntu 系统】打开 mysqld 系统服务配置文件:
vim /etc/init.d/mysqld

...

.start
$bindir/mysqld_safe --user=root --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null &
...
#23、【UBuntu 系统】重新加载系统的控制单元:
systemctl daemon-reload

#服务启动
service mysqld start
#服务停止
service mysqld stop
#服务重启
service mysqld restart
#服务状态
service mysqld status
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=/usr/local/mysql
# 设置mmysql数据库的数据的存放目录
datadir=/mnt/data/mysql/db
# 设置进程编号文件保存路径
pid-file=/mnt/data/mysql/mysql.pid
# mysqlsock存储目录
socket=/mnt/data/mysql/db/mysql.sock
# 允许最大连接数
max_connections=10000
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=UTF8MB4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用"mysql_native_password"播件认证
authentication_policy=mysql_native_password
# 设置MySQL数据库时区
default-time_zone ='+8:00'
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
# mysqlsock存储目录
socket=/mnt/data/mysql/db/mysql.sock
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8
[mysqld_safe]
log-error=/mnt/data/mysql/logs/mysql.log
pid-file=/mnt/data/mysql/mysql.pid
# mysqlsock存储目录
socket=/mnt/data/mysql/db/mysql.sock

mysql 安全

mysql 创建新用户并给授权指定的数据库权限

mysql -uroot -proot;

#低版本数据库
create user '用户民'@'%' identified by '密码';
#高版本数据库
create user 'mysqlYix'@'%' identified with mysql_native_password by 'root';
#修改密码:
alter user '用户名'@'%' identified by '密码';
#这个时候访问,是除了默认生成information_schema和test数据库,看不到任何其它的数据库信息

#给该用户添加权限
#all 可以替换为 select,delete,update,create,drop
#指定数据库
grant all privileges on 想授权的数据库.* to '用户名'@'%';
#全部数据库
grant all privileges on *.* to 'mysqlYix'@'%';
#删除用户
delete from mysql.user where user='mysqlYix';

远程授权

# 先进入mysql
mysql -u root -p
# 授权(root用户)远程连接权限(不建议)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '远程登录密码' WITH GRANT OPTION;
FLUSH PRIVILEGES;
# 使用单独的远程登录用户(推荐)
GRANT ALL PRIVILEGES ON *.* TO 'mysql_yix'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;

USE mysql;
#设置远程访问:
UPDATE user SET user.host='%' WHERE user.User='mysqlYix';
UPDATE user SET user.host='localhost' WHERE user.User='root';
#配置立即生效:
FLUSH PRIVILEGES;

mysql8 新特性

caching_sha2_password

#默认禁用mysql_native_password
#开启需要配置文件配置 my.cnf 不建议开启
mysql_native_password=on

上次编辑于: