mysql
大约 7 分钟
网址参考
MySQL 查询数据库中表名、表注释、字段名、字段类型、字段注释
mysql 中将查询结果进行拼接处理及 concat、group_concat 的使用
解决 mysql 允许执行 XA RECOVER 语句(atomikos 解决分布式事务报错)
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