MySQL篇
- 阿里云服务器
- 一.创建一个实例
- 二.安装下载MySQL
- 1.mysql-8.0.22-linux-glibc2.12-x86_64.tar.xz
- 2.将压缩包扔到Linux的 /usr/local文件夹中
- 3.使用解压命令解压:
- 4.重命名解压后得到的文件夹, 名称变更为 mysql (mysql一些默认配置里Linux访问路径为:/usr/local/mysql, 直接重命名后,后续一些地方则不需要更改)
- 5.进入被重命名过的文件夹中,再创建一个文件夹,取名:data
- 7.创建 /etc/my.cnf . 看其他博友说的,好像是8.0这个版本通过二进制文件解压安装的话是不存在的. 这里手动创建一个
- 8.创建mysql用户, 进行授权
- 9. 生成mysql基础数据(有密码)
- 10.添加mysql服务到系统,并完成授权
- 三. mysql启动: `service mysql start`
阿里云服务器
一.创建一个实例
注意:7.5和8的镜像是有区别的,最好安装7.5的 ps.因为很多人用解决办法多,所以这期以7.5为例
二.安装下载MySQL
可以用5版本的
MySQL 8:
mysql官方下载Linux版本,我这里下载的是:
1.mysql-8.0.22-linux-glibc2.12-x86_64.tar.xz
2.将压缩包扔到Linux的 /usr/local文件夹中
3.使用解压命令解压:
tar xvf /usr/local/mysql-8.0.22-linux-glibc2.12-x86_64.tar.xz
4.重命名解压后得到的文件夹, 名称变更为 mysql (mysql一些默认配置里Linux访问路径为:/usr/local/mysql, 直接重命名后,后续一些地方则不需要更改)
5.进入被重命名过的文件夹中,再创建一个文件夹,取名:data
(1) cd /usr/local/mysql
(2) mkdir data
data是MySQL的日志目录文件
7.创建 /etc/my.cnf . 看其他博友说的,好像是8.0这个版本通过二进制文件解压安装的话是不存在的. 这里手动创建一个
(1) vi /etc/my.cnf
(2)复制以下内容进去:
[mysqld]
port=3306
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
max_connections=10000
max_connect_errors=10
character-set-server=UTF8MB4
default-storage-engine=INNODB
lower_case_table_names=1
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
(需要修改的地方):
basedir
: /usr/local/mysql ------- 使用给定目录作为根目录(安装目录)
datadir
: /usr/local/mysql/data --------- 从给定目录读取数据库文件,存储mysql数据文件夹
重要的两个:
lower_case_table_names
: 值为1,忽略大小写,即查询时候不分大小写(一旦设置并启动后,再更改比较烦,慎重)
sql_mode
: (sql中select后面的字段必须出现在group by后面,或者被聚合函数包裹,不然会抛出上面的错误,允许使用 GROUP BY 函数)
(3)ESC -> :wq (保存文件)
8.创建mysql用户, 进行授权
1: 创建mysql用户,用户组(将mysql用户放进用户组内)
(1): groupadd mysql
(2): useradd -g mysql mysql
2: 授权
(1) chown -R mysql.mysql /usr/local/mysql
(2) chmod 755 /usr/local/mysql
(3) chmod 644 /etc/my.cnf
9. 生成mysql基础数据(有密码)
(1) cd /usr/local/mysql/bin
(2) 生成mysql数据库基础数据: **
./mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --lower_case_table_names=1 --initialize
**
文字说明:
–user=mysql : 指定运行mysqld进程的用户名。可更改,主要为了后续添加多个mysql管理员时方便
–basedir=/usr/local/mysql: 安装目录
–datadir=/usr/local/mysql/mysql-files: 数据存放目录
–lower_case_table_names=1: 不区分大小写(这个根据自己需求来,可以先搜索看看)
注:
1.该命令运行后, 会产生一个临时登录密码, 在返回结果的最后一行(可搜索看看)
2.执行该命令时, 可能会报错: ./mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory
3.解决办法(可选) | 下面两个我自己在执行完第一个命令之后就可以了:
(1)安装numactl. 我的linux系统是Centos的, 执行命令: yum -y install numactl
(2)安装libaio. 我的linux系统是Centos的, 执行命令: yum install -y libaio
4.安装完成后, 再次执行上面的 “生成mysql数据库基础数据” 命令即可
5.命令执行后, 记得将最后一行的临时登录密码记录下来, 后续会被使用到
10.添加mysql服务到系统,并完成授权
(1) cd /usr/local/mysql
(2) cp -a ./support-files/mysql.server /etc/init.d/mysql
(3) chmod +x /etc/init.d/mysql
(4) chkconfig --add mysql
三. mysql启动:
service mysql start
mysql状态查看: `service mysql status`
1. mysql登录
(1) `mysql -uroot -p`
(2) 需要输入的密码是 第9步中运行生成基础数据后, 返回结果中给出的临时密码
注:
(1) 执行 mysql -uroot -p 时可能报错: -bash: mysql: command not found
(2) 解决办法 | 执行命令:/usr/local/mysql/bin/mysql restart
(3) 执行命令后, 再次输入mysql -uroot -p
2. 修改密码
(1) `ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'xxxx';` (xxxx - 这里需要自己设置密码)
(2) `flush privileges;` (密码生效)
3. 允许远程连接
(1) `use mysql;`
(2) `update user set host='%' where user='root';`
(3) `flush privileges;`
注:
(1): 成功执行后, 表明该mysql已经启动了远程连接登录. 如果这时候你使用工具进行连接时候是失败的, 你需要查看下你的服务器安全组是否开放了3306(mysql连接默认端口)端口
4.设置开机自启动
(1) 复制mysql安装目录下的mysql.server : cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
(2) 赋予权限:chmod +x /etc/init.d/mysqld
(3) 添加服务: chkconfig --add mysqld
(4) 查看服务列表: chkconfig --list
注:
- mysql安装目录为: /usr/lcoal/mysql - 执行第一个命令时,注意路径
- 执行(4)后, 看到mysql行数据 - 3,4,5都为"开"或"on"表示成功
可能会出现的一些问题
1.开放远程登录权限
mysql>
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option
;
2如果报这个错
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
2(则是)密码简单不符合MySQL密码策略
查看MySQL密码初始的策略.
SHOW VARIABLES LIKE 'validate_password%';
关于 mysql 密码策略相关参数;
1)、validate_password_length
固定密码的总长度;
2)、validate_password_dictionary_file
指定密码验证的文件路径;
3)、validate_password_mixed_case_count
整个密码中至少要包含大/小写字母的总个数;
4)、validate_password_number_count
整个密码中至少要包含阿拉伯数字的个数;
5)、validate_password_policy
指定密码的强度验证等级,默认为 MEDIUM;
关于 validate_password_policy 的取值:
0/LOW:只验证长度;
1/MEDIUM:验证长度、数字、大小写、特殊字符;
2/STRONG:验证长度、数字、大小写、特殊字符、字典文件;
6)、validate_password_special_char_count 整个密码中至少要包含特殊字符的个数;
5.7和8.0不同
mysql数据库5.7和8.0由于全局变量名字改了所以运行的命令不同,但是本质一样。 5.7是:set global validate_password_policy=0; 8.0是:set global validate_password.policy=0;
3要连接成功得释放3306端口
手动创建一个入口
4若出现FirewallD is not running
错误解决
执行
firewall-cmd --permanent --zone=public --add-port=8080/tcp
,提示FirewallD is not running
通过systemctl status firewalld
查看firewalld状态,发现当前是dead状态,即防火墙未开启。
通过systemctl start firewalld
开启防火墙,没有任何提示即开启成功。
如果要关闭防火墙设置,可能通过systemctl stop firewalld
这条指令来关闭该功能。
再次通过systemctl status firewalld
查看firewalld状态,显示running即已开启。
再次执行执行firewall-cmd --permanent --zone=public --add-port=3306/tcp,提示success,表示设置成功。
5阿里云服务器:防火墙默认是不开启,要手动开启
设置远程连接mysql的新账户密码
>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
查看防火墙:systemctl status firewalld
查看3306状态:firewall-cmd --zone=public --query-port=3306/tcp
为no表示关闭中,则打开端口:firewall-cmd --zone=public --add-port=3306/tcp --permanent
重载防火墙:firewall-cmd --reload
再次查看3306端口:firewall-cmd --zone=public --query-port=3306/tcp
链接: 错误.
链接: 安装MySQL.