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