环境
-
linux:centOS 7
-
jdk:8
-
Mysql:5.7.24
Yum安装
安装前,我们可以检测系统是否自带安装 MySQL:
rpm -qa | grep mysql
如果你系统有安装,那可以选择进行卸载,有两种模式:
- 普通删除模式
rpm -e mysql
- 强力删除模式
rpm -e --nodeps mysql
如果使用上面命令删除时,提示有依赖的其它文件,则用该命令可以对其进行强力删除
安装
- 下载mysql安装包
wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
- 安装
rpm -ivh mysql57-community-release-el7-9.noarch.rpm
- 下载安装依赖包
yum install mysql-server //第一次下载这里会比较慢
- 验证是否安装成功
mysqladmin –version
mysqladmin Ver 8.42 Distrib 5.7.22, for Linux on x86_64
[root@VM_10_10_centos ~]# mysql -V
mysql Ver 14.14 Distrib 5.7.27, for Linux (x86_64) using EditLine wrapper
- 启动MySQL
sudo systemctl start mysqld
- 查看 MySQL 运行状态
sudo systemctl status mysqld
- 停止 MySQL
sudo systemctl stop mysqld
- 重启 MySQL
sudo systemctl restart mysqld
关于密码
Mysql 5.7 默认安装之后 root 是有密码的,获取 MySQL 的临时密码 为了加强安全性,MySQL 5.7 为 root 用户随机生成了一个密码,在 error log 中,关于 error log 的位置,如果安装的是 RPM 包,则默认是 /var/log/mysqld.log 。 只有启动过一次 mysql 才可以查看临时密码。
在利用 YUM 安装 mysql 数据库过程中,系统会自动生成一个临时密码,获取方式为:
grep 'temporary password' /var/log/mysqld.log
-
没有密码
如果以前安装过 mysql,这时的 mysqld.log 中就不会有 temporary password
这时就需要删除 mysql 残留的数据:
rm -rf /var/lib/mysql
- 执行完毕后需要重新启动MySQL服务:
sudo systemctl restart mysqld
这时就可以通过上面的命令去查找数据库生成的临时密码了
mysql 1130 错误
可能是你的帐号不允许从远程登陆,只能在 localhost。这个时候只要在 localhost 的那台电脑,登入 mysql 后,更改 “mysql” 数据库里的 “user” 表里的 “host” 项,从”localhost”改称”%”
mysql -u root -pvmwaremysql>use mysql;
mysql> update user set host = '%' where user = 'root';
mysql> select host, user from user;
使得我们当前的账户和密码能够应用的所有的远程主机连接:
GRANT ALL PRIVILEGES ON . TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;
源码安装
- 下载MySQL
#进入local目录
cd /usr/local/
#下载mysql
wget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.33-linux-glibc2.5-x86_64.tar.gz
- 解压MySQL修改名称
#解压mysql
tar -zxvf mysql-5.6.33-linux-glibc2.5-x86_64.tar.gz
#修改mysql名称
mv mysql-5.6.33-linux-glibc2.5-x86_64 mysql
- 添加用户和组
#添加用户组
groupadd mysql
#添加用户mysql到用户组mysql
useradd -g mysql mysql
- 安装mysql
#进入mysql目录
cd /usr/local/mysql
#把目录权限分配给mysql组下的mysql用户
chown -R mysql:mysql ./
#安装mysql
./scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data
#安装mysql语句报错执行
yum -y install perl perl-devel
#复制配置文件
cp support-files/mysql.server /etc/init.d/mysqld
#添加权限
chmod 755 /etc/init.d/mysqld
#复制启动脚本
cp support-files/my-default.cnf /etc/my.cnf
- 修改配置文件
#打开配置目录
vi /etc/init.d/mysqld
#增加目录配置
basedir=/usr/local/mysql/
datadir=/usr/local/mysql/data
- 启动,修改root密码,添加远程连接用户权限
#修改环境变量配置文件
vi /etc/profile
#增加mysql全局变量,使service mysqld start可以在任意位置使用
export PATH=$PATH:/usr/local/mysql/bin
#即时生效
source /etc/profile
#启动mysql
service mysqld start
#mysql刚安装完毕没有密码进入mysql命令行
mysql -uroot -p
#查询mysql用户
select User, Host, Password FROM mysql.user;
#修改root密码
update mysql.user set password=password('root') where User="root";
#为root添加远程权限
grant all privileges on *.* to 'root'@'%'identified by 'root' with grant option;
#刷新权限
flush privileges;
- 修改mysql启动占用内存过大的问题,mysql5.6以上启动占用内存默认为128m,在mysql根目录下my.cnf添加以下配置可修改为默认占用为40m
performance_schema_max_table_instances = 400
table_definition_cache = 400
table_open_cache = 256
问题合辑:
【问题】
有时候,只是为了自己测试,不想密码设置得那么复杂,譬如只想设置root的密码为123456。
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');
但是会报错:
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123');
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
【原因】
原来MySQL5.6.6版本之后增加了密码强度验证插件validate_password,相关参数设置的较为严格。
使用了该插件会检查设置的密码是否符合当前设置的强度规则,若不满足则拒绝设置。影响的语句和函数有:create user,grant,set password,password(),old password。
【解决】
1) 查看mysql全局参数配置
该问题其实与mysql的validate_password_policy的值有关。
查看一下msyql密码相关的几个全局参数:
mysql> select @@validate\_password\_policy;
+----------------------------+
| @@validate\_password\_policy |
+----------------------------+
| MEDIUM |
+----------------------------+
1 row in set (0.00 sec)
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate\_password\_dictionary_file | |
| validate\_password\_length | 8 |
| validate\_password\_mixed\_case\_count | 1 |
| validate\_password\_number_count | 1 |
| validate\_password\_policy | MEDIUM |
| validate\_password\_special\_char\_count | 1 |
+--------------------------------------+--------+
6 rows in set (0.08 sec)
2)参数解释
validate_password_dictionary_file
插件用于验证密码强度的字典文件路径。
validate_password_length
密码最小长度,参数默认为8,它有最小值的限制,最小值为:validate_password_number_count + validate_password_special_char_count + (2 * validate_password_mixed_case_count)
validate_password_mixed_case_count
密码至少要包含的小写字母个数和大写字母个数。
validate_password_number_count
密码至少要包含的数字个数。
validate_password_policy
密码强度检查等级,0/LOW、1/MEDIUM、2/STRONG。有以下取值:
Policy Tests Performed
0 or LOW Length
1 or MEDIUM Length; numeric, lowercase/uppercase, and special characters
2 or STRONG Length; numeric, lowercase/uppercase, and special characters; dictionary file
默认是1,即MEDIUM,所以刚开始设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符。
validate_password_special_char_count
密码至少要包含的特殊字符数。
3)修改mysql参数配置
mysql> set global validate\_password\_policy=0;
Query OK, 0 rows affected (0.05 sec)
mysql> set global validate\_password\_mixed\_case\_count=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate\_password\_number_count=3;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate\_password\_special\_char\_count=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate\_password\_length=3;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------+-------+
| validate\_password\_dictionary_file | |
| validate\_password\_length | 3 |
| validate\_password\_mixed\_case\_count | 0 |
| validate\_password\_number_count | 3 |
| validate\_password\_policy | LOW |
| validate\_password\_special\_char\_count | 0 |
+--------------------------------------+-------+
6 rows in set (0.00 sec)
4)修改简单密码:
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123');
Query OK, 0 rows affected, 1 warning (0.00 sec)
OK了,完美解决!