chaoz的杂货铺

生命有息、学无止境、折腾不止

0%

Mysql学习笔记

入门

win安装

以管理员身份打开 cmd 命令行工具,切换目录:

cd C:\web\mysql-8.0.11\bin
初始化数据库:
mysqld --initialize --console
执行完成后,会输出 root 用户的初始默认密码,如:

...
2018-04-20T02:35:05.464644Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: APWCY5ws&hjQ
...
APWCY5ws&hjQ 就是初始密码,后续登录需要用到,你也可以在登陆后修改密码。 输入以下安装命令:
mysqld install
启动输入以下命令即可:
net start mysql

登录 MySQL

当 MySQL 服务已经运行时, 我们可以通过 MySQL 自带的客户端工具登录到 MySQL 数据库中, 首先打开命令提示符, 输入以下格式的命名:

mysql -h 主机名 -u 用户名 -p

参数说明:

-h : 指定客户端所要登录的 MySQL 主机名, 登录本机(localhost 或 127.0.0。1)该参数可以省略;
-u : 登录的用户名;
-p : 告诉服务器将会使用一个密码来登录, 如果所要登录的用户名密码为空, 可以忽略此选项。
如果我们要登录本机的 MySQL 数据库,只需要输入以下命令即可:

mysql -u root -p
按回车确认, 如果安装正确且 MySQL 正在运行, 会得到以下响应:
Enter password:
若密码存在, 输入密码登录, 不存在则直接按回车登录。登录成功后你将会看到 Welecome to the MySQL monitor... 的提示语。 然后命令提示符会一直以 mysq> 加一个闪烁的光标等待命令的输入, 输入 exit 或 quit 退出登录。 ## 填坑 ### ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO),MySQL8.0忘记密码并修改 ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO) (先将MySQL服务停掉) 1、在MySQL的bin目录下执行mysqld --skip-grant-tables,失效,仍然不能登录MySQL 发现在8.0后这个mysqld --skip-grant-tables跳过mysql的用户验证已经失效 在8.0后变为了在bin目录下执行
mysqld --console --skip-grant-tables --shared-memory
跳过权限验证 2、另开一个cmd窗口,到bin下面执行mysql进入无密码登录页面 3、执行
use mysql

4、执行

show tables;
(分号不能丢),可以看到你需要账号的密码的各个表

5、执行修改密码操作:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';

6、然后执行flush privileges;就好了

如果在修改密码的时候出现错误,如:The MySQL server is running with the –skip-grant-tables option so it cannot execute this statement

先执行

flush privileges;
再执行修改密码的语句,再执行
flush privileges;

Linux下mysql登录出错

重置密码解决MySQL for Linux错误 ERROR 1045 (28000): Access denied for user ‘root‘@’localhost’ (using password: YES)

1.跳过密码验证进入mysql

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
or
vim /etc/my.cnf(注:windows下修改的是my.ini)

2、找到[mysqld]这一块代码,在后面加上skip-grant-tables,如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
character_set_server=utf8

skip-external-locking

skip-grant-tables

3、保存后重启mysql

service mysql restart

4、接着输入

mysql

5、输入”show databases;”查看数据库
在mysql数据库有一个user表,存储的是数据库用户的信息,我们需要修改的里面用户的密码;

6、输入use mysql;
是要使用mysql数据库的意思

7、输入
update user set authentication_string=password("yourNewPassword") where User='root';
(数据库账号密码更新语句)

注意:
执行后报错 ERROR 1054(42S22) Unknown column ‘password’ in ‘field list’

错误的原因是 5.7版本下的mysql数据库下已经没有password这个字段了,password字段改成了authentication_string

update mysql.user set authentication_string=password('*******') where user='*******'; #修改密码成功

flush privileges; #立即生效

8、回到第一步,将密码输入跳过设置删除

找到[mysqld]这一块代码,删除第一步加入的skip-grant-tables。

9、保存后就可以输入
service mysql restart
重启mysql.

接着输入
mysql -u root -p
回车输入密码就不会在出错了。

RROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’

网上很多人回答是权限的问题,这确实后一部分,但是有些问题就像我这种明显就是搞错了软件没有安装完全导致无法使用。

mysql和mariaDB的区别

这里首先要了解清楚mysql和mariaDB的区别,你的机器装的到底是哪一个版本,现在的centos默认是mariaDB,以前是mysql。关于这两者的区别就是:mariaDB是mysql源代码的一个分支,现在mariaDB 现在是很多开源系统默认的 mysql 实现。mariaDB 基本上和 mysql 差不多,对使用者来说基本都是一样的。

centos可以通过

rpm -qa|grep mysql 查看有没有安装mysql
rpm -qa|grep maria 查看有没有安装mariaDB
具体看你要安装哪种 ,不要两种混装,这样会导致问题的。

安装mariaDB

可以直接通过yum源来安装,默认安装的就是mysql

yum -y install mysql
yum -y install mariadb-server
mysql_secure_installation 设置 root密码等相关
第二步没安装的的话,会报错的,即ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’

安装mysql

在安装mysql之前请把所有的关于mariaDB的东西删除干净,然后去官网下载rpm包(centos默认的yum源已经没有mysql的安装包了,你可以通过yum list |grep mysql,看到没有mysql-server这个安装包)或者下述的方法安装。

1
2
3
4
5
6
7
8
9
10
rpm -qa|grep maria 找出所有关于mariaDB的安装包
yum remove -y maria* 在后面加上上面的包名删除
wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm这里是获取yum源,因为官方的没有我们要下载一个,这个源是mysql官网提供的
sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm 安装,安装这个包后,会获得两个mysql的yum repo源:/etc/yum.repos.d/mysql-community.repo,/etc/yum.repos.d/mysql-community-source.repo.
sudo yum install mysql-server
systemctl start mysql 启动mysql服务
systemctl enable mysql 设置mysql开机启动
mysql -u root -p(刚进去是没有密码的直接回车)
update user set password=PASSWORD(’passwd’) where User=’root’;
flush privileges;

五、关于目录
其实这些都是定义在/etc/my.cnf文件中,里面有默认的定义。出现问题首先应该看日志的错误输出。

1
2
3
4
5
1. mysql数据库的data目录 /var/lib/mysql/
2. mysql头文件:/usr/include/mysql/
3. mysql可执行文件: /usr/bin/
4. mysql库文件:/usr/lib64/mysql
3. mysql日志文件:/var/log/mysqld.log

远程登陆

关于无法远程登陆的问题可以直接改表:
GRANT ALL PRIVILEGES ON . TO ‘root’@’%’ IDENTIFIED BY ‘123456’ WITH GRANT OPTION;

MySql中user表中主机配置

配置只要是root用户+密码,在任何主机上都能登录MySQL数据库。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
1.进入mysql
[root@hadoop102 mysql-libs]# mysql -uroot -p000000
2.显示数据库
mysql>show databases;
2.1修改密码
mysql>SET PASSWORD=PASSWORD('000000');
3.使用mysql数据库
mysql>use mysql;
4.展示mysql数据库中的所有表
mysql>show tables;
5.展示user表的结构
mysql>desc user;
6.查询user表
mysql>select User, Host, Password from user;
7.修改user表,把Host表内容修改为%
mysql>update user set host='%' where host='localhost';
8.删除root用户的其他host
mysql>delete from user where Host='hadoop1';
mysql>delete from user where Host='127.0.0.1';
mysql>delete from user where Host='::1';
9.刷新
mysql>flush privileges;
10.退出
mysql>quit;

喜欢这篇文章?打赏一下作者吧!

欢迎关注我的其它发布渠道