误删除root用户解决方法1
1)停止数据库 [root@db02 ~]# /etc/init.d/mysqld stop 2)跳过授权表,跳过网络启动数据库 [root@db02 ~]# mysqld_safe --skip-grant-tables --skip-networking & 3)连接数据库 [root@db02 ~]# mysql 4)插入新root用户 insert into mysql.user values ('localhost','root',PASSWORD('123'), 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', '', '', '', '',0,0,0,0,'mysql_native_password','','N'); 5)重启MySQL [root@db01 ~]# mysqladmin shutdown [root@db01 ~]# /etc/init.d/mysqld start Starting MySQL. SUCCESS! 创建超级用户 mysql> grant all on *.* to root@'192.168.110.12' identified by '123' with grant option;
误删除root用户解决方法2
1)停止数据库 [root@db02 ~]# /etc/init.d/mysqld stop 2)跳过授权表,跳过网络启动数据库 [root@db02 ~]# mysqld_safe --skip-grant-tables --skip-networking & 3)连接数据库 [root@db02 ~]# mysql 4)刷新授权表 mysql> flush privileges; 5)创建root超级用户 mysql> grant all on . to root@'localhost' identified by '123' with grant option;
mysqld服务器程序构成
1.连接层:
- 验证用户合法性(用户名/密码/端口)
- 提供tcp/socket连接方式
- 提供一个专用连接层的线程(接收sql返回结果),将sql交给sql层处理
2.sql层
- 接收连接层传来的sql语句
- 检查sql语法是否正确
- 检查语义(DDL DML DQL DCL) 检查show select grant
- 解析器,解析sql语句,生成多种执行计划
- 优化器,根据多种执行计划选择最优方式。
- 执行器,执行优化器传来的最优方式sql;
- 提供跟存储引擎层交互的线程
- 接收返回数据,优化成表的形式返回sql
- 将数据存入缓存
- 记录binlog日志
3.存储引擎层
- 接收sql传来的sql语句
- 去磁盘找到要找的数据
- 提供一个与sql层交互的线程,返回给sql层,结构化成表的形式。
MySQL程序连接方式:
1.TCP/IP连接
mysql -uroot -p123 -h127.0.0.1
1)并不是所有的-h都是TCP/IP连接
2)所有的远程连接都是TCP/IP连接
2.socket连接
mysql -uroot -p123 -S /tmp/mysql.sock
mysql -uroot -p123
mysql -uroot -p123 -hlocalhost
1.MySQL默认连接方式是socket连接
2.socket连接速度快,因为不需要建立三次握手
什么是实例?
1.MySQL的后台进程+线程+预分配的内存结构。
2.MySQL在启动的过程中会启动后台守护进程,并生成工作线程,预分配内存结构供MySQL处理数据使用。
MySQL的结构
查看当前所在库
mysql> select database();