MySQL的基本操作
一、忘记root密码
1、编辑mysql主配置文件 my.cnf,配置文件路径:/etc/my.cnf
[root@mysql ~]# vim /etc/my.cnf
然后再配置文件中找到[mysqld]字段,在[mysqld]字段下添加参数skip-grant ,如下图:
退出保存
重启mysql服务
[root@mysql ~]# /etc/init.d/mysqld restart Shutting down MySQL.... SUCCESS! #这个提示就表示MySQL已经启动起来
2、重启完成之后使用mysql -uroot就可以不用输入密码直接登录MySQL服务器
但是登陆的时候报错信息如下:
[root@mysql ~]#mysql -uroot -bash: mysql:command not found
解决办法是执行有三个:
A、先更改PATH,允许mysql登录,但是这样子的做法呢,就是机器重启之后你登录的时候
还是会报错,还需要执行这个命令,另外一个办法就是把这个命令加入到开启启动文件呢中
去。
[root@mysql ~]# PATH=$PATH:/usr/local/mysql/bin
加入到开启动文件中去,添加到最后一行,如图所示
开机启动配置文件:/etc/rc.local
B、做软连接接
以上A、B两种方法任何一个都可以
系统重启之后,需要输入:[root@mysql ~]# source /etc/rc.local 命令然后就可以使用密码登录了
现在可以登录mysql,不需要输入密码,直接可以登录
[root@mysql ~]#mysql -uroot elcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.1.40 MySQL Community Server (GPL) Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
3、更改密码
首先use mysql进去这个库
mysql> use mysql
Database changed
然后更新
mysql> update user set password=password('123456') where user='root'; Query OK, 2 rows affected (0.04 sec) Rows matched: 3 Changed: 2 Warnings: 0
这个命令的意思就是更新user表,修改密码为123456,所有的root都更改
4、密码更改完成之后需要刷新表,刷新或者重启都可以
mysql> flush privileges;
Query OK, 0 rows affected (0.05 sec)
5、密码修改完成之后,需要在/etc/my.cnf文件中把刚开始添加的skip-gran字段删除
不然mysql没有安全性
然后重启mysql服务
[root@mysql ~]#/etc/init.d/mysqld restart Shutting down MySQL. SUCCESS! Starting MySQL...SUCCESS!
6、在此登录mysql的时候需要输入密码才可以登录
不输入密码报错
[root@mysql ~]# mysql -uroot ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
输入密码登录
[root@mysql ~]#mysql -uroot -p654321 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.1.40 MySQL Community Server (GPL) Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
-p:后面跟的是密码,这是登录方式
7、直接在shell中执行mysql的命令。需要加上-e参数如下图:
[root@mysql ~]# mysql -uroot -p654321 -e "use mysql; select user,host from user where user='root'"
8、使用tcp来连接数据库
[root@mysql ~]# mysql -uroot -p654321 -h127.0.0.1 -P3306
-h:指定远程主机的ip
-P(大写的):用来指定远程主机mysql的绑定端口
二、mysql常用操作
1、查看都有哪些库 show databases;
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | cheng | | mysql | | test | +--------------------+ 4 rows in set (0.04 sec)
information_schema、mysql、test这三个表示默认都存在的
结束的标志是以封号(;)来结尾的
2、查看某个库的表
先进入一个库
mysql> use cheng
Database changed
查看cheng这个库里都有哪些表
mysql> show tables;
3、查看表的字段 desc tb;
mysql> desc pre_common_block;
desc后面跟表名
3、查看建表语句 show create table tb;
mysql> show create table pre_common_block;
使用G可以分割
mysql> show create table pre_common_block\G;
4、当前是哪个用户 select user();
mysql> select user(); +----------------+ | user() | +----------------+ | root@localhost | +----------------+ 1 row in set (0.00 sec)
5、当前库 select database();
mysql> select database();
+------------+
| database() |
+------------+
| cheng |
+------------+
1 row in set (0.00 sec)
6、创建库 create database db1;
mysql> create database cheng2;
Query OK, 1 row affected (0.02 sec)
7、创建表 create table t1 (`id` int(4), `name` char(40));
进入刚才创建的库
mysql> use cheng2;
Database changed
创建表
mysql> create table `st` (`id` int(4),`name` char(50)) ENGINE=MYISAM DEFAULT CHARSET=gbk; Query OK, 0 rows affected (0.13 sec)
Init:类型
Char:字符串
ENGINE=MYISAM DEFAULT CHARSET=gbk:默认引擎
查询刚才创建的st表的语句
mysql> show create table st\G; *************************** 1. row *************************** Table: st Create Table: CREATE TABLE `st` ( `id` int(4) DEFAULT NULL, `name` char(50) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=gbk 1 row in set (0.00 sec) ERROR: No query specified ERROR: No query specified
查看库里面有几个表
mysql> show tables;
+------------------+
| Tables_in_cheng2 |
+------------------+
| st |
+------------------+
1 row in set (0.00 sec)
8、查看数据库版本 select version();
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.1.40 |
+-----------+
1 row in set (0.00 sec)
9、更改表的某一行 update db1.t1 set name='aaa' where id=1
mysql> update st set name='ct' where id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
查看更改过的结果
mysql> select * from st;
+------+------+
| id | name |
+------+------+
| 1 | ct |
+------+------+
1 row in set (0.00 sec)
10、插入新的一行
mysql> insert into st(id,name) values(1,'cheng168');
Query OK, 1 row affected (0.01 sec)
查询表
mysql> select * from st;
+------+----------+
| id | name |
+------+----------+
| 1 | cheng168 |
+------+----------+
1 row in set (0.00 sec)
11、删除表中的一行
mysql> delete from st where name='ct'
Query OK, 1 row affected (0.01 sec)
查看st表,发现表中的一行已经不存在了,成了空表
mysql> select * from st;
Empty set (0.00 sec)
12、删除一个表中的所有行
mysql> truncate table st;
Query OK, 0 rows affected (0.00 sec)
查看
mysql> select * from st;
Empty set (0.00 sec)
清空表 truncate table db1.t1;
13、删除表 drop table db1.t1;
mysql> drop table st;
Query OK, 0 rows affected (0.08 sec)
14、删除数据库 drop database db1;
mysql> drop database cheng2;
Query OK, 0 rows affected (0.16 sec)
在Linux系统中,使用cat .mysql_history可以查看mysql的历史命令
[root@mysql ~]# cat .mysql_history
15、创建普通用户并授权 grant all on cheng1.* to 'user1'@'127.0.0.1' identified by '123456';
mysql> grant all on cheng1.* to 'user1'@'127.0.0.1' identified by '123456';
Query OK, 0 rows affected (0.02 sec)
all:表示所所有的权限
*.*:前面的*表示的是所有的数据库,后面的*表示的是所有的表
Identified by:后面跟密码,要使用单引号括起来
127.0.0.1:表示的是网络上的主机,当然也可以%号来表示,使用%号就表示所有
16、查看mysql状态 show status;
mysql> show status;
17、更改密码 UPDATE mysql.user SET password=PASSWORD("newpwd") WHERE user='username' ;
18、 show variables:查看参数
mysql> show variables;
+-----------------------------------------+-------------------------------------------------------------------------------------------+
| Variable_name | Value |
+-----------------------------------------+-------------------------------------------------------------------------------------------+
| auto_increment_increment | 1 |
| auto_increment_offset | 1 |
| autocommit | ON |
| automatic_sp_privileges | ON |
| back_log | 50 |
19、修改mysql参数
过滤出带有关键字的参数:show variables like 'max_connect%';
mysql> show variables like 'max_connect%';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| max_connect_errors | 10 |
| max_connections | 151 |
+--------------------+-------+
2 rows in set (0.00 sec)
修改参数:set global max_connect_errors = 1000;
mysql> set global max_connect_errors = 1000;
Query OK, 0 rows affected (0.00 sec)
现在查看已经把max_connect_errors参数修改了
mysql> show variables like 'max_connect_errors';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| max_connect_errors | 1000 |
+--------------------+-------+
1 row in set (0.00 sec)
set global:临时修改某些参数,MySQL重启之后就会还原,永久生效,需要修改my.cnf文件
%:相当于Linux中*的意思,通配的意思
20、查看mysql队列 show processlist;
mysql> show processlist;
+----+------+-----------+------+---------+------+-------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------+------+---------+------+-------+------------------+
| 2 | root | localhost | NULL | Query | 0 | NULL | show processlist |
+----+------+-----------+------+---------+------+-------+------------------+
1 row in set (0.00 sec)
21、查询 select count(*) from mysql.user;
mysql> select count(*) from mysql.user;
+----------+
| count(*) |
+----------+
| 7 |
+----------+
1 row in set (0.01 sec)
Mysql.user:表示的是mysql库中的user表
count(*):表示的是表中有多少行
22、修复表 repair table tb1 [use frm];
mysql> repair table pre_ucenter_settings;
+----------------------------+--------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+----------------------------+--------+----------+----------+
| cheng.pre_ucenter_settings | repair | status | OK |
+----------------------------+--------+----------+----------+
1 row in set (0.05 sec)
pre_ucenter_settings:是表名
也可以在使用repair table pre_ucenter_settings use_frm;来修复
use_frm:
select * from mysql.db; select * from mysql.db where host like '10.0.%';
三、mysql备份与恢复
1、备份数据库 mysqldump -uroot -p db >1.sql
[root@mysql ~]# mysqldump -uroot -p654321 cheng > /tmp/mysqbackup.sql
cheng:数据库名称,就是你要备份哪一个数据库
/tmp/mysqbackup.sql:备份到/tmp/目录下,并且命名为mysqbackup.sql
2、恢复 mysql -uroot -p db <1.sql
[root@mysql ~]# mysql -uroot -p654321 cheng < /tmp/mysqbackup.sql
3、只备份一个表 mysqldump -uroot -p db tb1 > 2.sql
恢复的时候跟恢复数据时一样的,不需要指定表名
4、备份时指定字符集 mysqldump -uroot -p --default-character-set=gbk db >1.sql
--default-character-set=gbk:指定字符集
5、 恢复也指定字符集 mysql -uroot -p --default-character-set=utf8 db < 1.sql
6、只备份建表语句
[root@mysql ~]# mysqldump -uroot -p654321 -d cheng pre_forum_post> /tmp/post.sql
-d:只备份建表语句
有错误的地方恳请大神指正,小白会感激不尽同时也会继续修改