离线安装MySQL

311 阅读3分钟

准备基础文件

www.cnblogs.com/connected/p…

安装方式为:RPM安装 centos.pkgs.org/

numactl-libs-2.0.12-5.el7.x86_64.rpm
libaio-0.3.109-13.el7.x86_64.rpm
mysql-5.7.9-1.el7.x86_64.rpm-bundle.tar

删除原有的mariadb,不然装不进msyql

  • 查询:
rpm -qa | grep mariadb
  • 卸载mariadb:
rpm -e --nodeps mariadb-libs-****-1.el7_5.x86_64

开始安装

  1. 检查安装libaio环境:
rpm -qa|grep libaio
  1. 没有则安装,上传后安装命令:
rpm -ivh libaio-0.3.107-10.el6.x86_64.rpm
  1. 下载mysql5.7的tar压缩包/解压:
mysql-5.7.9-1.el7.x86_64.rpm-bundle.tar

tar -xvf mysql-5.7.9-1.el7.x86_64.rpm-bundle.tar
  1. 安装mysql-community-common-5.7.9-1.el7.x86_64.rpm
rpm -ivh mysql-community-common-5.7.9-1.el7.x86_64.rpm --force --nodeps
  1. 安装mysql-community-libs-5.7.9-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.9-1.el7.x86_64.rpm --force --nodeps
  1. 安装mysql-community-devel-5.7.9-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.9-1.el7.x86_64.rpm --force --nodeps
  1. 安装mysql-community-libs-compat-5.7.9-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.9-1.el7.x86_64.rpm --force --nodeps
  1. 安装mysql-community-client-5.7.9-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.9-1.el7.x86_64.rpm --force --nodeps
  1. 安装mysql-community-server-5.7.9-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.9-1.el7.x86_64.rpm --force --nodeps

4~9 可以使用命令 rpm -Uvh *.rpm --nodeps --force 自动根据依赖安装。

检查是否安装成功

rpm -qa|grep mysql
  1. 关闭mysql服务:
service mysqld stop

数据库初始化

mysqld --initialize --user=mysql

数据库初始化有时候反应会比较慢,请耐心等待。初始化成功后会生成一个随机密码

使用以下命令查看生成的密码

grep 'temporary password' /var/log/mysqld.log

启动数据库服务

systemctl start mysqld.service

修改密码

mysql -u root -p
设置新密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

之后再想修改密码时:

mysql> use mysql;
Database changed

mysql> set password for root@'%' = password('新密码');
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> exit

设置远程连接

mysql -u root -p
查看user表
mysql> use mysql;
Database changed
设置远程连接
mysql> grant all privileges  on *.* to root@'%' identified by "自定义的密码";
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> select host,user from user;
+-----------+---------------+

| host | user |

+-----------+---------------+

| % | root |

| localhost | mysql.session |

| localhost | mysql.sys |

| localhost | root |

+-----------+---------------+

4 rows in set (0.00 sec)

加入开机自启

systemctl enable mysqld;

出现的异常的情况

运行

mysqld --initialize --user=mysql

出现

mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory

安装 numactl-libs-2.0.12-5.el7.x86_64.rpm

rpm -ivh numactl-libs-2.0.12-5.el7.x86_64.rpm
再次执行初始化时
[root@3e94ecf9f375 ansible]# mysqld --initialize --user=mysql
2020-09-01T06:22:54.028191Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaul
ts_for_timestamp server option (see documentation for more details).
2020-09-01T06:22:54.031958Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.
2020-09-01T06:22:54.036136Z 0 [ERROR] Aborting


原因: 已经初始化,但没有成功,想再次初始化报错。 解决: 数据文件目录有其他的文件,这个data目录应该是一个空目录; 查看/etc/my.cnf文件里面的data目录是哪个,把里面的文件删除。

密码无法重置

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

操作步骤

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Qq123456';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (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             | LOW   |
| validate_password_special_char_count | 1     |
+--------------------------------------+-------+
6 rows in set (0.00 sec)

mysql> set validate_password_length=6;

ERROR 1229 (HY000): Variable 'validate_password_length' is a GLOBAL variable and should be set with SET GLOBAL
mysql> set global validate_password_length=6;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW VARIABLES LIKE 'validate_password%';

+--------------------------------------+-------+
| Variable_name                        | Value |
+--------------------------------------+-------+
| validate_password_dictionary_file    |       |
| validate_password_length             | 6     |
| validate_password_mixed_case_count   | 1     |
| validate_password_number_count       | 1     |
| validate_password_policy             | LOW   |
| validate_password_special_char_count | 1     |
+--------------------------------------+-------+
6 rows in set (0.00 sec)

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)

update user set host='%' where user='root';

修改好host之后,我们要让它立即生效,还要执行这样一个语句:flush privileges;

操作完成之后,再用root远程访问就可以了。

=======================我是分隔线啦=======================

如果要认密码永不过期的话,可以使用以下方法:

1、修改密码

set passwordpassword=password('123456');

2、设定密码的有效期为0,即永不过期;

set global default_password_lifetime=0;

3、在配置文件中添加配置;[如果不做上面修改,可以直接修改配置文件,但是改完后要重启服务才生效]

[mysqld]

default_password_lifetime=0