linux恢复root用户,多实例,mysql程序结构,MySQL结构,相关mysql语句,段页区,导入sql文件

一.误删除root用户如何恢复?

二.mysqld 的程序结构

三.mysql的多实例

四 mysql的结构

五.相关mysql语句

六.页区段

七.数据库导入

 


 

一.误删除root用户如何恢复?

方法一

1.停止数据库
[root@db01 ~]# /etc/init.d/mysqld stop

2.跳过授权表启动mysql
[root@db01 ~]# mysqld_safe --skip-grant-tables --skip-networking &

3.尝试创建用户
mysql> create user root@'localhost' identified by '123';
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
mysql> grant all on *.* to root@'localhost' identified by '123';
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

4.插入root用户
mysql> insert into user(host,user,password,ssl_cipher,x509_issuer,x509_subject) values('localhost','root',PASSWORD('123'),'','','');

 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');


方法二:

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

mysql> grant all on *.* to root@'要恢复的用户' identified by '123';
Query OK, 0 rows affected (0.00 sec)

授权超级用户
grant all on *.* to root@'要恢复的用户' identified by '123' with grant option;


二.mysqld 的程序结构


1.连接层
    1)检验用户的合法性
    2)提供两种连接方式
        a)TCP/IP
        [root@db02 ~]# mysql -uroot -p123 -h10.0.0.51
        [root@db01 ~]# mysql -uroot -p123 -h127.0.0.1

        b)socket
        [root@db01 ~]# mysql -uroot -p123 -S /usr/local/mysql/tmp/mysql.sock
        [root@db01 ~]# mysql -uroot -p123 -hlocalhost
        [root@db01 ~]# mysql -uroot -p123
    3)建立一个与SQL层交互的线程
        
2.SQL层
    1)接收连接层传来的SQL语句
    2)检查语法
    3)检查语义(检查它属于哪种SQL语句:DDL,DML,DCL,DQL)
    4)解析器:解析SQL语句,生成多种执行计划
    5)优化器:接收解析器传来的多种执行计划,选择最优化的一条方式去执行
    6)执行器:执行优化器传来的最优方式的SQL语句
        a)建立一个与存储引擎层交互的线程
        b)接收存储引擎层,返回的结构化成表的数据
    7)写缓存
    8)记录日志


3.存储引擎层
    1)接收SQL层传来的SQL语句
    2)与磁盘交互,找到数据并结构化成表的形式,返回给SQL层
    3)建立一个与SQL层交互的线程


三.mysql的多实例

1.创建多个配置文件目录
[root@db01 ~]# mkdir -p /data/330{7..9}

[root@db01 ~]# tree /data/
/data/
├── 3307
├── 3308
└── 3309

[root@db01 ~]# ll /data/
total 0
drwxr-xr-x. 2 root root 6 May  9 09:59 3307
drwxr-xr-x. 2 root root 6 May  9 09:59 3308
drwxr-xr-x. 2 root root 6 May  9 09:59 3309

2.编辑多个配置文件
[root@db01 ~]# vim /data/3307/my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/data/3307/data
port=3307
socket=/data/3307/mysql.sock
server-id=7
log_error=/data/3307/data/mysql.err
pid=/data/3307/data/mysql.pid

========================================

[root@db01 ~]# vim /data/3308/my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/data/3308/data
port=3308
socket=/data/3308/mysql.sock
server-id=8
log_error=/data/3308/data/mysql.err
pid=/data/3308/data/mysql.pid

=========================================

[root@db01 ~]# vim /data/3309/my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/data/3309/data
port=3309
socket=/data/3309/mysql.sock
server-id=9
log_error=/data/3309/data/mysql.err
pid=/data/3309/data/mysql.pid


2.进入初始化目录
[root@db01 ~]# cd /usr/local/mysql/scripts/

3.初始化多套数据目录
[root@db01 scripts]# ./mysql_install_db --defaults-file=/data/3307/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/data/3307/data
[root@db01 scripts]# ./mysql_install_db --defaults-file=/data/3308/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/data/3308/data
[root@db01 scripts]# ./mysql_install_db --defaults-file=/data/3309/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/data/3309/data

[root@db01 scripts]# ll /data/330*
/data/3307:
total 4
drwx------. 5 mysql mysql 127 May  9 10:11 data
-rw-r--r--. 1 root  root  175 May  9 10:05 my.cnf

/data/3308:
total 4
drwx------. 5 mysql mysql 127 May  9 10:12 data
-rw-r--r--. 1 root  root  175 May  9 10:06 my.cnf

/data/3309:
total 4
drwx------. 5 mysql mysql 127 May  9 10:12 data
-rw-r--r--. 1 root  root  175 May  9 10:07 my.cnf


4.授权
[root@db01 scripts]# chown -R mysql.mysql /data/330*

5.启动mysql
[root@db01 scripts]# mysqld_safe --defaults-file=/data/3307/my.cnf &
[root@db01 scripts]# mysqld_safe --defaults-file=/data/3308/my.cnf &
[root@db01 scripts]# mysqld_safe --defaults-file=/data/3309/my.cnf &

6.检查端口
[root@db01 scripts]# netstat -lntup|grep 330
tcp6       0      0 :::3306                 :::*                    LISTEN      41108/mysqld        
tcp6       0      0 :::3307                 :::*                    LISTEN      42206/mysqld        
tcp6       0      0 :::3308                 :::*                    LISTEN      42378/mysqld        
tcp6       0      0 :::3309                 :::*                    LISTEN      42550/mysqld  

7.检查进程
[root@db01 scripts]# ps -ef|grep mysqld
root      40999      1  0 08:54 pts/0    00:00:00 /bin/sh /usr/local/mysql-5.6.40/bin/mysqld_safe --datadir=/usr/local/mysql-5.6.40/data --pid-file=/usr/local/mysql-5.6.40/data/db01.pid
mysql     41108  40999  0 08:54 pts/0    00:00:03 /usr/local/mysql-5.6.40/bin/mysqld --basedir=/usr/local/mysql-5.6.40 --datadir=/usr/local/mysql-5.6.40/data --plugin-dir=/usr/local/mysql-5.6.40/lib/plugin --user=mysql --log-error=db01.err --pid-file=/usr/local/mysql-5.6.40/data/db01.pid
root      42056   7747  0 10:18 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf
mysql     42206  42056  0 10:18 pts/0    00:00:00 /usr/local/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf --basedir=/usr/local/mysql --datadir=/data/3307/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/3307/data/mysql.err --pid-file=db01.pid --socket=/data/3307/mysql.sock --port=3307
root      42228   7747  0 10:18 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3308/my.cnf
mysql     42378  42228  4 10:18 pts/0    00:00:03 /usr/local/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf --basedir=/usr/local/mysql --datadir=/data/3308/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/3308/data/mysql.err --pid-file=db01.pid --socket=/data/3308/mysql.sock --port=3308
root      42379   7747  0 10:18 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3309/my.cnf
mysql     42550  42379  2 10:18 pts/0    00:00:02 /usr/local/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf --basedir=/usr/local/mysql --datadir=/data/3309/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/3309/data/mysql.err --pid-file=db01.pid --socket=/data/3309/mysql.sock --port=3309
root      42577   7747  0 10:20 pts/0    00:00:00 grep --color=auto mysqld


8.多实例设置密码
[root@db01 ~]# mysqladmin -uroot -p -S /data/3307/mysql.sock  password 3307
[root@db01 ~]# mysqladmin -uroot -p -S /data/3308/mysql.sock  password 3308
[root@db01 ~]# mysqladmin -uroot -p -S /data/3309/mysql.sock  password 3309

9.多实例连接
[root@db01 ~]# mysql -uroot -p3307 -S /data/3307/mysql.sock
[root@db01 ~]# mysql -uroot -p3308 -S /data/3308/mysql.sock
[root@db01 ~]# mysql -uroot -p3309 -S /data/3309/mysql.sock

10.连接技巧
[root@db01 ~]# vim /usr/local/mysql/bin/mysql3307
mysql -uroot -p3307 -S /data/3307/mysql.sock

[root@db01 ~]# vim /usr/local/mysql/bin/mysql3308
mysql -uroot -p3308 -S /data/3308/mysql.sock

[root@db01 ~]# vim /usr/local/mysql/bin/mysql3309
mysql -uroot -p3309 -S /data/3309/mysql.sock

[root@db01 ~]# chmod +x /usr/local/mysql/bin/mysql330*

11.停止mysql多实例
[root@db01 ~]# mysqladmin -uroot -p3307 -S /data/3307/mysql.sock shutdown
[root@db01 ~]# mysqladmin -uroot -p3308 -S /data/3308/mysql.sock shutdown
[root@db01 ~]# mysqladmin -uroot -p3309 -S /data/3309/mysql.sock shutdown

 

四 mysql的结构


frm与ibd分别是表结构和表空间

history查看历史使用过的命令
!与!!命令

mysql的结构
mysql的物理结构:最底层的数据库中的文件
mysql的逻辑结构:库,表,元数据,列

开发过程中库名和表名一定要小写,不然容易出问题
设置不区分大小写,修改my.cnf,在其中添加一行lower_case_table_names=1,修改后删除库是删的总是小写库
这是删除大写库会误删小写库,需要在物理结构中删除库
 

五.相关mysql语句

mysql客户端命令
对配置文件的修改****
架构c/s
大s指定socket文件
大p指定端口
h指定主机域
e指定sql语句

mysqladmin命令
和mysql的一样但是多了些命令
password制定密码
create 创建数据库
drop删除数据库

表相关
varchar和char中的是字符,指中文和英文的个数
int -2**31~2**31-1
tinyint -128 ~128
enum
datetime

表的约束条件comment表示字段注释
利用show create table 表,查看含义

修改表数据任意位置添加字段用first和after,删除字段alter table 名字 drop 字段名,
改表明用rename,修改字段属性用modify,修改字段属性的同时修改表名用change


授权 grant all on *.* to root@localhost  identfied by '123456';
收回权限 revoke all on *.*to root@localhost  identfied by '123456';
查看权限 show grants for root@localhost  identfied by '123456';
all可以为select,insert等等 *.*代表所有库的所有表 ,最后的是用户密码
授权的最小级别是列

插入多条数据用,隔开
update 表名字 set 字段=想要更改的值 where 条件 (条件不加相当于改整列,相当于删除)

delete from where  (删除后id不从1开始)
truncate (删除后id从1开始)
删除一般用update模拟删除(企业)

查询 
limit
like 
order by desc asc
and or in all
union all 合并查询效率更高 可以用explain 查看效率type,只有走索引才有级别,否则是全表扫描
自连接 NATURAL join 表的字段
内链接 小表 join 大表 on 字段=字段
左外连接和右外连接 left join on和right join on,就是只显示左边或右边


重启mysqld是service mysqld restart,若出现 ERROR! MySQL server process #8535 is not running!
Starting MySQL. SUCCESS! ,是正常的重新运行就不会有error
保证mysqld已经开启,不然直接mysql仍会有一下错误
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)
配置/etc/my.cnf 中的[client]中的socket


六.页区段

段:一个段=一张表,一个段是由多个区构成的
区:多个页构成的的,64k为一个区(4个页为一个区)
页:mysql最小单位,一个页为16k

 

七.数据库导入

导入数据库,直接把sql文件放在某个目录下,然后source这个目录即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值