我日常用到的mysql命令

我不是数据库管理员,只是在很多项目中都要用到数据库;就如本网站的环境也用到了mysql。好了,废话不多说,请看我经常用的命令。
mysql logo

+++ 开启MySQL远程访问权限 允许远程连接 +++

1.登陆mysql数据库

mysql -u root -p

查看user表

mysql> use mysql;
Database changed
mysql> select host,user,password from user;
+————–+——+——————————————-+
| host | user | password |
+————–+——+——————————————-+
| localhost | root | *A731AEBFB621E354CD41BAF207D884A609E81F5E |
| 192.168.1.1 | root | *A731AEBFB621E354CD41BAF207D884A609E81F5E |
+————–+——+——————————————-+
2 rows in set (0.00 sec)

可以看到在user表中已创建的root用户。host字段表示登录的主机,其值可以用IP,也可用主机名,

(1)有时想用本地IP登录,那么可以将以上的Host值改为自己的Ip即可。

2.实现远程连接(授权法)

将host字段的值改为%就表示在任何客户端机器上能以root用户登录到mysql服务器,建议在开发时设为%。
update user set host = ’%’ where user = ’root’;

将权限改为ALL PRIVILEGES

mysql> use mysql;
Database changed
mysql> grant all privileges on *.* to root@’%’ identified by “root”;
Query OK, 0 rows affected (0.00 sec)

mysql> select host,user,password from user;
+————–+——+——————————————-+
| host | user | password |
+————–+——+——————————————-+
| localhost | root | *A731AEBFB621E354CD41BAF207D884A609E81F5E |
| 192.168.1.1 | root | *A731AEBFB621E354CD41BAF207D884A609E81F5E |
| % | root | *A731AEBFB621E354CD41BAF207D884A609E81F5E |
+————–+——+——————————————-+
3 rows in set (0.00 sec)

这样机器就可以以用户名root密码root远程访问该机器上的MySql.

3.实现远程连接(改表法)

use mysql;

update user set host = ‘%’ where user = ‘root’;

+++ MySQL命令行创建用户与授权 +++

1.创建用户:
命令:CREATE USER username IDENTIFIED BY ‘password’;
说明:username——你将创建的用户名, password——该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器.

2.授权:
命令:GRANT privileges ON databasename.tablename TO username;
说明:privileges——用户的操作权限,如SELECT , INSERT , UPDATE 等,如果要授予所有的权限则使用ALL;databasename——数据库名;tablename——表名,如果要授予该用户对所有数据库和表的相应操作权限则可用*表示, 如*.*.

注意:用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令:
GRANT privileges ON databasename.tablename TO username WITH GRANT OPTION;

3.授权后还要刷新系统权限表:
flush privileges;

+++ 更改mysql字符集为utf8 +++

1.查看当前字符集状态
mysql> STATUS;
————–
mysql Ver 14.14 Distrib 5.1.47, for redhat-linux-gnu (x86_64) using readline 5.1

Connection id: 8
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ”
Using delimiter: ;
Server version: 5.1.47 Source distribution
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: latin1
Conn. characterset: latin1
UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 10 hours 4 min 49 sec

Threads: 4 Questions: 162 Slow queries: 0 Opens: 30 Flush tables: 1 Open tables: 10 Queries per second avg: 0.4
————–

mysql> show variables like ‘%char%’;
+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+
8 rows in set (0.00 sec)

2. 修改/etc/my.cnf设置
[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
character-set-server = utf8

3.重启mysql数据库
[root@localhost bin]# /etc/rc.d/init.d/mysqld restart

4.查看修改后的状态
mysql> status
————–
mysql Ver 14.14 Distrib 5.1.47, for redhat-linux-gnu (x86_64) using readline 5.1

Connection id: 2
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ”
Using delimiter: ;
Server version: 5.1.47 Source distribution
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /var/lib/mysql/mysql.sock
Uptime: 2 min 8 sec

Threads: 1 Questions: 6 Slow queries: 0 Opens: 15 Flush tables: 1 Open tables: 8 Queries per second avg: 0.46
————–

mysql> SHOW VARIABLES LIKE ‘character%’;
+————————–+—————————-+
| Variable_name | Value |
+————————–+—————————-+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+————————–+—————————-+
8 rows in set (0.00 sec)

5.修改已存在表的字符集设置
mysql> ALTER TABLE `tablename` CONVERT TO CHARACTER SET utf8;

+++ 其他一些常见命令 +++

create database name; 创建数据库

use databasename; 选择数据库

drop database name 直接删除数据库,不提醒

show tables; 显示表

describe tablename; 表的详细描述

select 中加上distinct去除重复字段

MySQLadmin drop databasename 删除数据库前,有提示。

显示当前MySQL版本和当前日期

select version(),current_date;

shell>MySQL -u root -p
MySQL> update user set passwordpassword=password(”xueok654123″) where user=’root’;
MySQL> flush privileges //刷新数据库

MySQL>use dbname; 打开数据库:

MySQL>show databases; 显示所有数据库

MySQL>show tables; 显示数据库MySQL中所有的表:先use MySQL;然后

MySQL>describe user; 显示表MySQL数据库中user表的列信息);

3、grant

创建一个可以从任何地方连接服务器的一个完全的超级用户,但是必须使用一个口令something做这个

MySQL> grant all privileges on *.* to user@localhost identified by ’something’ with

增加新用户

格式:grant select on 数据库.* to 用户名@登录主机 identified by “密码”

GRANT ALL PRIVILEGES ON *.* TO monty@localhost IDENTIFIED BY ’something’ WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO monty@”%” IDENTIFIED BY ’something’ WITH GRANT OPTION;
删除授权:

MySQL> revoke all privileges on *.* from root@”%”;
MySQL> delete from user where user=”root” and host=”%”;
MySQL> flush privileges;
创建一个用户custom在特定客户端it363.com登录,可访问特定数据库fangchandb

MySQL >grant select, insert, update, delete, create,drop on fangchandb.* to custom@ it363.com identified by ‘ passwd’
重命名表:

MySQL > alter table t1 rename t2;
MySQL命令大全4、MySQLdump

备份数据库

shell> MySQLdump -h host -u root -p dbname >dbname_backup.sql
恢复数据库

shell> MySQLadmin -h myhost -u root -p create dbname
shell> MySQLdump -h host -u root -p dbname < dbname_backup.sql 如果只想卸出建表指令,则命令如下: shell> MySQLadmin -u root -p -d databasename > a.sql
如果只想卸出插入数据的sql命令,而不需要建表命令,则命令如下:

shell> MySQLadmin -u root -p -t databasename > a.sql
那么如果我只想要数据,而不想要什么sql命令时,应该如何操作呢?

MySQLdump -T./ phptest driver
其中,只有指定了-T参数才可以卸出纯文本文件,表示卸出数据的目录,./表示当前目录,即与MySQLdump同一目录。如果不指定driver 表,则将卸出整个数据库的数据。每个表会生成两个文件,一个为.sql文件,包含建表执行。另一个为.txt文件,只包含数据,且没有sql指令。

5、可将查询存储在一个文件中并告诉MySQL从文件中读取查询而不是等待键盘输入。可利用外壳程序键入重定向实用程序来完成这项工作。例如,如果在文件my_file.sql 中存放有查询,可如下执行这些查询:

例如,如果您想将建表语句提前写在sql.txt中:

MySQL > MySQL -h myhost -u root -p database < sql.txt

MAHU各应用更改所属用户名群组

在前面几篇中所有应用启动的用户名群组都是采用默认方式,Ubuntu平台默认对这些应用启动的用户名一律是www-data:www-data。现在为了安全起见或者强迫症使然,我决定全部改成www:www来启动(请注意我这里修改后的还是举例:-))。
mahu,cluf专用
先说下apache2,它的用户名设置在/etc/apache2/envvars中,将其中如下两行

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

修改成

export APACHE_RUN_USER=www
export APACHE_RUN_GROUP=www

然后来说下HHVM,它的用户名藏在/etc/default/hhvm,直接修改成

RUN_AS_USER="www-data"
RUN_AS_GROUP="www-data"

再说下MySQL,它其实可以使用任何用户名来启动,修改/etc/my.cnf

[mysqld]
user=www

有一点需要注意的是,修改数据文件的用户名与群组:

chown -R user_name /path/to/mysql/datadir

否则启动完之后数据库可能因为权限问题变成空的了。数据库的启动我一般不去动它,只是将数据库登录的用户名密码进行强化。

最后,改完用户密码后,要对网站目录做相应的改变,正如前面安装wordpress所做的属主更改,这次只要一条命令记得:

sudo chown -R www:www /var/www/html

这些关键动作完成之后,注意记得重启所有进程

sudo systemctl restart mysql hhvm apache2

祝愿你的服务器如铜墙铁壁一样安全!