误删除root用户解决方法1
1)停止数据库[root@db02 ~]# /etc/init.d/mysqld stop2)跳过授权表,跳过网络启动数据库[root@db02 ~]# mysqld_safe --skip-grant-tables --skip-networking &3)连接数据库[root@db02 ~]# mysql4)插入新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 startStarting 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 stop2)跳过授权表,跳过网络启动数据库[root@db02 ~]# mysqld_safe --skip-grant-tables --skip-networking &3)连接数据库[root@db02 ~]# mysql4)刷新授权表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();
