第一步卸载mariadb
yum list installed | grep mariadb
yum -y remove mariadb*
第二步下载mysql5.7 !!!!一定是5.7,不是8.0
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
第三步检查并安装wget工具
yum -y install wget
第四步安装rpm包,并且检查mysql的yum源是否安装成功
rpm -ivh mysql57-community-release-el7-11.noarch.rpm
yum repolist enabled | grep "mysql.*-community.*"
出现三行红色的文字,则成功。
mysql-connectors-community/x86_64 MySQL Connectors Community 185
mysql-tools-community/x86_64 MySQL Tools Community 123
mysql57-community/x86_64 MySQL 5.7 Community Server 484
第五步开始安装
yum install mysql-server
出现下面内容,则安装完成。
Installed:
mysql-community-server.x86_64 0:5.7.33-1.el7
Dependency Installed:
mysql-community-client.x86_64 0:5.7.33-1.el7 mysql-community-common.x86_64 0:5.7.33-1.el7 mysql-community-libs.x86_64 0:5.7.33-1.el7
记几条命令,后面会用到。
重启mysql systemctl restart mysqld.service \ service remysqld start
启动mysql systemctl start mysqld.service \ service mysqld start
停止mysql systemctl stop mysqld.service \ service mysqld stop
第六步,启动mysql,并查看状态
出现下面内容,则启动完成。此时就可以使用密码登录了。
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2021-04-14 18:32:47 CST; 2min 13s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 7630 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
Process: 7602 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 7633 (mysqld)
CGroup: /system.slice/mysqld.service
└─7633 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
第七步 修改mysql密码,mysql安装完成会自动生成一个默认密码,在/var/log/mysqld.log 文件中,使用cat /var/log/mysqld.log 或者 grep 'temporary password' /var/log/mysqld.log查看。
然后使用mysql -uroot -p密码登录。
使用下面命令修改密码
set password=password("123456");
报错:提示密码不符合mysql的安全策略。
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
使用下面命令查看mysql密码策略
SHOW VARIABLES LIKE 'validate_password%';
报错:提示必须先用alter指令修改密码,才能看密码策略,简直鸡生蛋,蛋生鸡,死循环。修改密码可以使用alter user指令,也可以使用set password指令。mysql5.7和8.0有些不同。
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
密码策略里面比较重要的是validate_password_policy和validate_password_length,8.0之后改为validate_password.policy和validate_password.length,validate_password_policy是密码等级,默认是1(MEDIUM),要求英文大小写字母、特殊字符、数字,validate_password_length是密码长度,默认是8。如果不修改这两项是很难一次设置密码成功的。况且自己使用mysql,也不需要那么复杂的密码。
密码策略降为0(LOW)
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)
密码长度默认修改为1
mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.00 sec)
修改密码成功
mysql> alter user 'root'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
刷新权限
flush privileges;
Query OK, 0 rows affected (0.00 sec)
退出mysql
exit
设置开机自动启动
systemctl enable mysqld
重载所有修改过的配置文件
systemctl daemon-reload
第八步 重启mysql,查看mysql状态
systemctl restart mysqld.service
systemctl status mysqld.service
第九步 查看mysql版本
mysql -V
mysql Ver 14.14 Distrib 5.7.33, for Linux (x86_64) using EditLine wrapper
第十步 授权远程连接,如果你的mysql安装在阿里云或者腾讯云,你想在本地远程连接就必须授权远程连接。
可以添加一个允许远程连接的账号,授予他所有权限。
GRANT ALL PRIVILEGES ON *.* TO 'zhangsan'@'%' IDENTIFIED BY 'Zhangsan2018!' WITH GRANT OPTION;
没看懂,所以我给root开远程连接的权限。
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> UPDATE user SET Host='%' WHERE User='root';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
授权之后记得刷新权限和重启mysql
systemctl restart mysqld.service
这样就可以远程连接mysql了。
mysql 忘记密码时,设置跳过密码,先登录,再改密码。
nano /etc/my.cnf
在[mysqld]的段中加一句话:skip-grant-tables 保存(crt + O) Enter 退出(crt + X)
登录mysql 修改密码策略,降低密码等级。
密码策略降为0(LOW)
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)
密码长度默认修改为1
mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.00 sec)
修改密码成功 注意,mysql5.7的修改密码命令和其它版本的有些不同。
舍弃了update user set password=password(“新密码”) where user=”用户名”;
mysql> UPDATE user SET Password = password ( '123456' ) WHERE User = 'root';
ERROR 1054 (42S22): Unknown column 'Password' in 'field list'
mysql> update mysql.user set authentication_string=password('123456') where user='root';
Query OK, 0 rows affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 1
刷新权限
flush privileges;
Query OK, 0 rows affected (0.00 sec)
授权之后记得刷新权限和重启mysql
systemctl restart mysqld.service
这样就可以在忘记密码的情况下更新密码了。
在忘记密码的情况下不能用alter user命令
mysql> alter user 'root'@'localhost' identified by '123456';
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
alter user 只能在初次通过密码登录后,用于修改密码。以后只能使用update set 语句修改密码。
注意:mysql 5.7 默认安装了密码安全检查插件(validate_password),默认密码检查策略要求密码必须包含:大小写字母、数字和特殊符号,并且长度不能少于8位。否则会提示 ERROR 1819 (HY000): Your password does not satisfy the current policy requirements 错误。
首次登录,修改密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; 或者
set password for 'root'@'localhost'=password('123456');
以后通过update set 语言修改密码
update user set password=PASSWORD('123456') where user='root';或者
update mysql.user set authentication_string=password('123456') where user='root';
让mysql开机自启动
systemctl enable mysql
set password=password("youpassword");
firewall-cmd --zone=public --add-port=80/tcp --permanent (--permanent永久生效,没有此参数重启后失效)
远程连接mysql报错10060,有两种原因,一是mysql没有授权远程连接,那么use mysql,授权就行;另一种是防火墙拦截了3306端口。
查看防火墙允许开放的端口,firewall-cmd --zone=public --list-ports
给防火墙添加允许通过的端口,firewall-cmd --zone=public --add-port=3306/tcp --permanent
重载防火墙以生效,firewall-cmd --reload
windows下安装mysql8,root ,root
其它虚拟机下,免密登录或者root,123456
2003 - Cant't connect to MySQL server on 'ip'(10060 "Unknown error")
问题描述
今天在搭建服务器之后,安装好MySQL,启动成功,并且创建远程连接用户,用户名和密码都正确,使用Navicat远程连接抛出如下错误:
2003 - Cant’t connect to MySQL server on ‘192.168.137.137’(10060 “Unknown error”)
原因
经过一番查找发现问题所在:
因为Mysql默认不允许远程登录,所以需要设置防火墙开放3306端口
解决办法
开放3306 端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
#命令含义
--zone #作用域
--add-port=3306/tcp #添加端口,格式为:端口/通讯协议
--permanent #永久生效
重启防火墙
systemctl restart firewalld