我日常用到的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的WordPress网站搭建

MAHU为了写起来方便我自行发明的,你不理解很正常,这里说下来头M:Mysql,A:Apache2,H:HHVM,U:Ubuntu。

我采用的各个组件的版本:

  • Ubuntu 16.04.3 LTS
  • mysql – 5.7.19
  • Apache 2.4.18
  • HipHop VM 3.21.0
  • WordPress 4.8.1

接着说下各个部分的安装重点:

  • Ubuntu 16.04.3 LTS

Ubuntu的安装分区采用系统建议方式,以前划分很多小分区发现很多空间用不上,所以按照系统建议只有/boot、swap和根/分区。

应用类型选择了Ubuntu minimal installation、OpenSSH server和standard system utilities。

具体可以参考下互联网上的文章

  • mysql – 5.7.19

注意:mysql安装过程中的用户使用root。

直接对现有系统更新后采用apt-get安装

1
2
sudo apt-get update
sudo apt-get install mysql-server

安装过程会直接提示输入root的密码。

接着配置数据库系统安全,按照提示输入你想设置的密码一路Y即可(前面的root密码不想改的话直接回车):

1
mysql-secure-installation

最后创建wordpress数据库并授权(设置字符集为utf8主要为了后面支持中文):

1
2
3
4
5
mysql -u root -p
create database wordpress default character set utf8;
grant all privileges on wordpress.* to 'wpdbuser'@localhost identified by 'wpdbpasswd';
flush privileges;
quit

为了支持中文,建议将mysql客户端、服务器端等各个环节都采用utf8,其主要方式就是编辑/etc/mysql/my.cnf文件然后重启Mysql。相关的配置为:

1
2
3
4
5
6
[mysqld]
character-set-server=utf8
[mysql]
default-character-set=utf8
[client]
default-character-set=utf8

Note:别忘了systemctl restart mysql

  • Apache 2.4.18

Apache的安装由于新版本在Ubuntu上是apache2,所以安装时注意后面的2就好了。Apache的配置待HHVM安装完成后一并说明。安装与启动命令很简单:

1
2
3
4
sudo -s     //切换到root权限
apt-get install apache2
systemctl start apache2
systemctl enable apache2
  • HipHop VM 3.21.0

HHVM在前几次采用apt-get直接安装都出现没有install_fastcgi.sh脚本的情况,后来了解到因为源不对,采用下面的命令安装就没问题了。这个源在我这里的下载速度非常慢,不过慢慢等着就好,可以保证质量。

1
2
3
4
5
6
7
8
apt-get install -y software-properties-common
apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0x5a16e7281be7a449
add-apt-repository "deb http://dl.hhvm.com/ubuntu $(lsb_release -sc) main"
apt-get update
apt-get install -y hhvm
/usr/share/hhvm/install_fastcgi.sh
systemctl start hhvm
systemctl enable hhvm

结束后可以使用php -v查看版本。对了,别忘了,上面的命令全部以root权限执行的。

如果以上你都是首次安装,现在只需要再使用systemctl restart apache2整个应用的搭建就搞定了。

BTW, 最后当你真正发布博客时你会发现永久链接出现404 not found的错误,这是因为rewrite模块与网站目录overwrite值问题,我会在下一篇中单独说明。

  • WordPress 4.8.1

下载最新的压缩包并解压,由于我的Ubuntu是最小安装,所以在使用curl之前先要安装此应用。

1
2
3
4
apt-get install -y curl
cd /tmp //使用临时目录,方便最后清理过程文件
curl -0 https://wordpress.org/latest.tar.gz
tar -xzvf latest.tar.gz

将解压完的wordpress目录下文件全部拷贝到网站主目录

1
cp -a /tmp/wordpress/. /var/www/html

以下将开始配置wordpress。

将配置样例重命名为要使用的wp-config.php

1
cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php

修改文件用户与属主以及读写权限

1
2
3
4
5
chown -R www-data:www-data /var/www/html
find /var/www/html -type d -exec chmod g+s {} \;
chmod g+w /var/www/html/wp-content
chmod -R g+w /var/www/html/wp-content/themes
chmod -R g+w /var/www/html/wp-content/plugins

修改wp-config.php文件(vi /var/www/html/wp-config.php)

使用命令获取随机数然后替换wp-config.php文件中相应的行:

1
curl -s https://api.wordpress.org/secret-key/1.1/salt/

修改数据库连接信息,相关的信息与安装Mysql时创建wordpress数据库保持一致。

1
2
3
4
5
define('DB_NAME', 'wordpress');
define('DB_USER', 'wpdbuser');
define('DB_PASSWORD', 'wpdbpasswd');
define('DB_HOST', 'ip:3306');  /* 如果你安装同一台机器ip可以是127.0.0.1 */
define('FS_METHOD', 'direct'); /* 这个参数是新增的 */

以上完成了服务器上的所有配置。

现在你可以打开浏览器输入http://服务器ip按照wordpress的引导一步步去配置你的博客了。

 

其实我在搭建本博的时候,首先考虑的是使用nginx,测试过程发现标题使用中文会让HHVM直接down掉或者挂死,花了好些天都没找到根本原因,关于504错误网上说的可能情况很多,但都没有解决我的问题,最后决定换成Apache2(Ubuntu上的名称),你要是也遇到并解决了也请不吝赐教,我还是会考虑采用nginx的。

最后声明一下:本文所有知识均来自于互联网,博主只是加以理解整理而成,欢迎交流!