PHP time 函数

PHPllslx520 发表了文章 • 0 个评论 • 191 次浏览 • 2016-11-09 10:39 • 来自相关话题

一、函数功能:
  返回当前时间的 unix 时间戳。unix 时间戳为 Unix 纪元(格林威治时间1970 年1月1日 00:00:00)到当前时间的秒数。由于 time 函数的基准时区永远都是GMT,所以设置时区对此函数无影响。
 
二、函数语法:int time ( void )
三、函数参数:参数名描述无-
四、返回值:整型的 unix 时间戳
五、用法举例:
1、基本用法:<?php
//爱E族 aiezu.com
date_default_timezone_set("PRC");
$time = time(); // 获取当前时间戳

//输出当前时间和时间戳
echo sprintf("%d: %s\n", $time, date("Y-m-d H:i:s", $time));

$time += 10 * 24 * 60 * 60; // 时间戳加10天的秒数

//输出10天后的时间和时间戳
echo sprintf("%d: %s\n", $time, date("Y-m-d H:i:s", $time));输出:1478659132: 2016-11-09 10:38:52
1479523132: 2016-11-19 10:38:52 查看全部
一、函数功能:
  返回当前时间的 unix 时间戳。unix 时间戳为 Unix 纪元(格林威治时间1970 年1月1日 00:00:00)到当前时间的秒数。由于 time 函数的基准时区永远都是GMT,所以设置时区对此函数无影响。
 
二、函数语法:
int time ( void )

三、函数参数:
参数名描述
-

四、返回值:
整型的 unix 时间戳

五、用法举例:
1、基本用法:
<?php 
//爱E族 aiezu.com
date_default_timezone_set("PRC");
$time = time(); // 获取当前时间戳

//输出当前时间和时间戳
echo sprintf("%d: %s\n", $time, date("Y-m-d H:i:s", $time));

$time += 10 * 24 * 60 * 60; // 时间戳加10天的秒数

//输出10天后的时间和时间戳
echo sprintf("%d: %s\n", $time, date("Y-m-d H:i:s", $time));
输出:
1478659132: 2016-11-09 10:38:52
1479523132: 2016-11-19 10:38:52

PHP正则表达式替换<pre>标签外的内容

PHPllslx520 发表了文章 • 0 个评论 • 467 次浏览 • 2016-11-07 18:04 • 来自相关话题

  有时候,我们需要替换指定标签外的内容,而保留标签里面的内容不替换。比如当我们要在浏览器中显示出编辑器显示的原始格式时、需要将普通换行符“\n\r、\n、、\r”,替换为html换行标签“<br/>”,而由于“<pre>”标签中的内容自动会保留原始格式,所以不需要替换。要带到此目的,可以用下面方法:<?php
/**
* PHP 正则表达式替换指定标签外的内容
* 作者:爱E族: aiezu.com
*/
$content = <<<END
爱E族:aiezu.com
正常文本内容
需要将换行符替换成“br”换行符

<pre>
这是pre里面的内容
换行符不替换成“br”
</pre>
END;

$content = preg_replace_callback("#(?:<pre>.+?</pre>)|(?:\n\r|\n|\r)#s", function( $match ) {
if ( strpos($match[0], '<pre>') === 0 ) {
return $match[0];
}
return "<br/>\n";
}, $content);
echo $content;输出结果:爱E族:aiezu.com<br/>
正常文本内容<br/>
需要将换行符替换成“br”换行符<br/>
<br/>
<pre>
这是pre里面的内容
换行符不替换成“br”
</pre> 查看全部
  有时候,我们需要替换指定标签外的内容,而保留标签里面的内容不替换。比如当我们要在浏览器中显示出编辑器显示的原始格式时、需要将普通换行符“\n\r、\n、、\r”,替换为html换行标签“<br/>”,而由于“<pre>”标签中的内容自动会保留原始格式,所以不需要替换。要带到此目的,可以用下面方法:
<?php
/**
* PHP 正则表达式替换指定标签外的内容
* 作者:爱E族: aiezu.com
*/
$content = <<<END
爱E族:aiezu.com
正常文本内容
需要将换行符替换成“br”换行符

<pre>
这是pre里面的内容
换行符不替换成“br”
</pre>
END;

$content = preg_replace_callback("#(?:<pre>.+?</pre>)|(?:\n\r|\n|\r)#s", function( $match ) {
if ( strpos($match[0], '<pre>') === 0 ) {
return $match[0];
}
return "<br/>\n";
}, $content);
echo $content;
输出结果:
爱E族:aiezu.com<br/>
正常文本内容<br/>
需要将换行符替换成“br”换行符<br/>
<br/>
<pre>
这是pre里面的内容
换行符不替换成“br”
</pre>

PHP date 函数详解

PHPllslx520 发表了文章 • 0 个评论 • 247 次浏览 • 2016-11-07 11:34 • 来自相关话题

一、函数功能:
  将 unix 数字时间戳转换为指定格式的时间日期字符串。转载请注明出处,爱E族:aiezu.com

二、函数语法:string date ( string $format [, int $timestamp ] )
三、参数介绍:
1、函数参数:参数名描述$format返回时间日期的格式;$timestamp可选参数,unix时间戳(GMT时间1970-01-01 0:0:0到某个时间的秒数),默认当前时间的时间戳;
2、$format参数中的特殊字符:
下面是$format时间日期格式化参数中的特殊字符,本函数自动会将字符替换为对应的值:字符描述cISO-8601规范的日期和时间,如:2014-08-12T20:20:45+00:00(PHP5新加)rRFC-2822定义的日期和时间,如:Thu, 21 Dec 2020 16:01:07 +0200年: L是否为闰年,闰年则返回 1,否则返回 0y年份,两位数字,如:98,16Y年份,四位数字,如:1998,2016o年份,同Y格式。但是当一周跨越两年时,o会返回此周起始年的年份(ISO-8601规范,PHP5.1新加)I如果启用夏时制则返回 1,否则返回 0月: m月份的数字表示(从01到12)n月份的数字表示(从1到12)F月份英文全拼(从January到December)M月份英文简拼(从Jan到Dec)周: W当年的第几周,当一周跨越两年时,此周算在上一年中(ISO-8601标准)N数字表示的星期几,从1(星期一)到7(星期日)(ISO-8601标准,PHP5.1新加)D星期几的英文简称(从Mon到Sun)l星期几的英文全称(从Sunday到Saturday)w星期中的第几天(星期天是 0)天: z一年中的第几天(从0到365)t本月的总天数,可能的值:28,29,30,31d一个月中的第几天(从01到31)j一个月中的第几天(从1到31)S一个月中的第几天,2个字符表示的英语序数词,如:st,nd,rd,th,可以和配合j使用。a上午还是下午(am 或 pm)A上午还是下午(AM 或 PM)时分秒: h小时(从01到12)H小时(从00到23)g小时(从1到12)G小时(从0到23)i分钟s秒数Uunix时间戳,从Unix纪元(GMT时间1970-01-01 00:00:00)起的秒数,和“time()”函数作用相同。u毫秒,如:654321(PHP 5.2.2 新加)时区: T时区缩写,如:EST, MDT...e时区标识,如: PRC, UTC, GMT, Asia/Shanghai(PHP 5.1.0 新加)O与GMT(格林威治时间)的时差,以小时为单位,如:+0200P与GMT(格林威治时间)的时差,包括小时和分钟,如:+02:00(PHP5.1.3新加)Z与GMT(格林威治时间)的时差,以秒为单位的时区偏移量B斯沃琪因特网时间(从000到999)
3、标准时间格式化常量:
下面是几个标准时间格式化常量,PHP5.1.1起可用,可以直接做为$format参数使用。常量标准示例DATE_ATOMAtom2005-08-15T15:52:01+00:00DATE_RFC3339等同于DATE_ATOMPHP 5.1.3起可用DATE_COOKIEHTTP CookiesMonday, 15-Aug-2005 15:52:01 UTCDATE_ISO8601ISO-86012005-08-15T15:52:01+0000DATE_RFC822RFC 822Mon, 15 Aug 05 15:52:01 +0000DATE_RFC850RFC 850Monday, 15-Aug-05 15:52:01 UTCDATE_RFC1036RFC 1036Mon, 15 Aug 05 15:52:01 +0000DATE_RFC1123RFC 1123Mon, 15 Aug 2005 15:52:01 +0000DATE_RFC2822RFC 2822Mon, 15 Aug 2005 15:52:01 +0000DATE_RSSRSSMon, 15 Aug 2005 15:52:01 +0000DATE_W3CWorld Wide Web Consortium2005-08-15T15:52:01+00:00

四、返回值:返回格式化后的日期时间的字符串;
如果 $timestamp 参数不是一个有效数值,则返回 false 并引发 E_WARNING 级别的错误。
五、用法举例:
1、常见日期时间格式:<?php
//爱E族: aiezu.com
date_default_timezone_set('PRC');
$date = '2012/12/23 23:24:25';
echo date("Y-m-d H:i:s\n", strtotime($date));
echo date("Y-m-d\n", strtotime($date));
echo date("H:i:s\n", strtotime($date));
echo date("h:i:s\n", strtotime($date));
echo date("c\n", strtotime($date));
echo date("r\n", strtotime($date));输出:2012-12-23 23:24:25
2012-12-23
23:24:25
11:24:25
2012-12-23T23:24:25+08:00
Sun, 23 Dec 2012 23:24:25 +0800
2、日期时间格式化常量:<?php
//爱E族 aiezu.com
date_default_timezone_set('PRC');
echo sprintf("DATE_RFC850格式: %s\n", date(DATE_RFC850));
echo sprintf(" DATE_W3C格式: %s\n", date(DATE_W3C, strtotime('2020-12-12 12:12:12')));输出:DATE_RFC850格式: Monday, 07-Nov-16 12:29:42 CST
DATE_W3C格式: 2020-12-12T12:12:12+08:00
3、转义字符:
可以在特殊字符前面加反斜杠"\",把特殊字符转换为普通字符。<?php
//爱E族: aiezu.com
date_default_timezone_set('PRC');
echo date("\Y-\m-\d \H:\i:\s -> Y-m-d H:i:s");输出:Y-m-d H:i:s -> 2016-11-07 12:33:12 查看全部
一、函数功能:
  将 unix 数字时间戳转换为指定格式的时间日期字符串。转载请注明出处,爱E族:aiezu.com

二、函数语法:
string date ( string $format [, int $timestamp ] )

三、参数介绍:
1、函数参数:
参数名描述
$format返回时间日期的格式;
$timestamp可选参数,unix时间戳(GMT时间1970-01-01 0:0:0到某个时间的秒数),默认当前时间的时间戳;

2、$format参数中的特殊字符:
下面是$format时间日期格式化参数中的特殊字符,本函数自动会将字符替换为对应的值:
字符描述
cISO-8601规范的日期和时间,如:2014-08-12T20:20:45+00:00(PHP5新加)
rRFC-2822定义的日期和时间,如:Thu, 21 Dec 2020 16:01:07 +0200
年: 
L是否为闰年,闰年则返回 1,否则返回 0
y年份,两位数字,如:98,16
Y年份,四位数字,如:1998,2016
o年份,同Y格式。但是当一周跨越两年时,o会返回此周起始年的年份(ISO-8601规范,PHP5.1新加)
I如果启用夏时制则返回 1,否则返回 0
月: 
m月份的数字表示(从01到12)
n月份的数字表示(从1到12)
F月份英文全拼(从January到December)
M月份英文简拼(从Jan到Dec)
周: 
W当年的第几周,当一周跨越两年时,此周算在上一年中(ISO-8601标准)
N数字表示的星期几,从1(星期一)到7(星期日)(ISO-8601标准,PHP5.1新加)
D星期几的英文简称(从Mon到Sun)
l星期几的英文全称(从Sunday到Saturday)
w星期中的第几天(星期天是 0)
天: 
z一年中的第几天(从0到365)
t本月的总天数,可能的值:28,29,30,31
d一个月中的第几天(从01到31)
j一个月中的第几天(从1到31)
S一个月中的第几天,2个字符表示的英语序数词,如:st,nd,rd,th,可以和配合j使用。
a上午还是下午(am 或 pm)
A上午还是下午(AM 或 PM)
时分秒: 
h小时(从01到12)
H小时(从00到23)
g小时(从1到12)
G小时(从0到23)
i分钟
s秒数
Uunix时间戳,从Unix纪元(GMT时间1970-01-01 00:00:00)起的秒数,和“time()”函数作用相同。
u毫秒,如:654321(PHP 5.2.2 新加)
时区: 
T时区缩写,如:EST, MDT...
e时区标识,如: PRC, UTC, GMT, Asia/Shanghai(PHP 5.1.0 新加)
O与GMT(格林威治时间)的时差,以小时为单位,如:+0200
P与GMT(格林威治时间)的时差,包括小时和分钟,如:+02:00(PHP5.1.3新加)
Z与GMT(格林威治时间)的时差,以秒为单位的时区偏移量
B斯沃琪因特网时间(从000到999)

3、标准时间格式化常量:
下面是几个标准时间格式化常量,PHP5.1.1起可用,可以直接做为$format参数使用。
常量标准示例
DATE_ATOMAtom2005-08-15T15:52:01+00:00
DATE_RFC3339等同于DATE_ATOMPHP 5.1.3起可用
DATE_COOKIEHTTP CookiesMonday, 15-Aug-2005 15:52:01 UTC
DATE_ISO8601ISO-86012005-08-15T15:52:01+0000
DATE_RFC822RFC 822Mon, 15 Aug 05 15:52:01 +0000
DATE_RFC850RFC 850Monday, 15-Aug-05 15:52:01 UTC
DATE_RFC1036RFC 1036Mon, 15 Aug 05 15:52:01 +0000
DATE_RFC1123RFC 1123Mon, 15 Aug 2005 15:52:01 +0000
DATE_RFC2822RFC 2822Mon, 15 Aug 2005 15:52:01 +0000
DATE_RSSRSSMon, 15 Aug 2005 15:52:01 +0000
DATE_W3CWorld Wide Web Consortium2005-08-15T15:52:01+00:00


四、返回值:
返回格式化后的日期时间的字符串;
如果 $timestamp 参数不是一个有效数值,则返回 false 并引发 E_WARNING 级别的错误。

五、用法举例:
1、常见日期时间格式:
<?php
//爱E族: aiezu.com
date_default_timezone_set('PRC');
$date = '2012/12/23 23:24:25';
echo date("Y-m-d H:i:s\n", strtotime($date));
echo date("Y-m-d\n", strtotime($date));
echo date("H:i:s\n", strtotime($date));
echo date("h:i:s\n", strtotime($date));
echo date("c\n", strtotime($date));
echo date("r\n", strtotime($date));
输出:
2012-12-23 23:24:25
2012-12-23
23:24:25
11:24:25
2012-12-23T23:24:25+08:00
Sun, 23 Dec 2012 23:24:25 +0800

2、日期时间格式化常量:
<?php
//爱E族 aiezu.com
date_default_timezone_set('PRC');
echo sprintf("DATE_RFC850格式: %s\n", date(DATE_RFC850));
echo sprintf(" DATE_W3C格式: %s\n", date(DATE_W3C, strtotime('2020-12-12 12:12:12')));
输出:
DATE_RFC850格式: Monday, 07-Nov-16 12:29:42 CST
DATE_W3C格式: 2020-12-12T12:12:12+08:00

3、转义字符:
可以在特殊字符前面加反斜杠"\",把特殊字符转换为普通字符。
<?php
//爱E族: aiezu.com
date_default_timezone_set('PRC');
echo date("\Y-\m-\d \H:\i:\s -> Y-m-d H:i:s");
输出:
Y-m-d H:i:s -> 2016-11-07 12:33:12

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '***' (2)

Mysqlllslx520 发表了文章 • 0 个评论 • 10564 次浏览 • 2016-11-04 16:50 • 来自相关话题

  有时候,当我们使用“mysql”、“mysqladmin”、“mysqldump”等命令管理数据库时,服务器抛出类似如下错误:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)这个错误是由于什么原因导致的呢?请看后面爱E族(aiezu.com)为您提供的分析。 一、错误现场还原:下面我们通过三种方式来连接,然后观察提示的错误信息:1、直接使用“mysql”命令,不带主机名参数;2、使用带了主机名“localhost”参数的“mysql -h localhost”命令;3、使用带了主机名“127.0.0.1”参数的“mysql -h 127.0.0.1”命令。[root@aiezu.com ~]# mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
[root@aiezu.com ~]# mysql -h localhost
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
[root@aiezu.com ~]# mysql -h 127.0.0.1
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)  通过上面实验可以看出,前面两种方式都能产生标题中的错误,而第三种方式连接是不会产生标题中的错误的(第三种方式这里产生的是由于密码问题拒绝访问的错误信息)(爱E族)。 二、错误产生原因解析:   这是由于我们连接数据库使用的主机名参数为“localhost”,或者未使用主机名参数、服务器默认使用“localhost”做为主机名(爱E族)。 使用主机名参数为“localhost”连接mysql服务端时,mysql客户端会认为是连接本机,所以会尝试以socket文件方式进行连接(socket文件连接方式,比“ip:端口”方式效率更高),这时根据配置文件“/etc/my.cnf”的路径,未找到相应的socket文件,就会引发此错误。
   三、修复故障前准备:1、看mysql服务是否在运行:  由于“socket”文件是由mysql服务运行时创建的,如果提示“ERROR 2002 (HY000): Can't connect to local MySQL server through socket '***' (2)”,找不到“socket”文件,我们首先要确认的是mysql服务是否正在运行。# 1、 端口是否打开
[root@aiezu.com ~]# lsof -i:3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 12207 mysql 14u IPv4 52350 0t0 TCP *:mysql (LISTEN)

# 2、mysqld服务是否正在运行
[root@aiezu.com ~]# service mysqld status
mysqld (pid 4717) is running...

# 3、如果mariadb,同样方法查服务是否正在运行:
[root@aiezu.com ~]# service mariadb status
Redirecting to /bin/systemctl status mariadb.service
● mariadb.service - MariaDB database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
Active: active (running) since 四 2016-11-03 13:47:37 CST; 23min ago  2、确定“socket”文件正确位置:  确定mysql服务正常运行后,产生此错误的原因只剩下“socket”文件路径不正确了,我们可以使用“find”命令或者“lsof”命令来确定socket文件的正确路径:[root@aiezu.com ~]# lsof -c mysqld|grep sock$
mysqld 4717 mysql 12u unix 0xffff88010a655b80 0t0 77474827 /storage/db/mysql/mysql.sock

[root@aiezu.com ~]# find / -name '*.sock'
/storage/db/mysql/mysql.sock 四、故障解决方法:解决方案一:  修改“/etc/my.cnf”配置文件,在配置文件中添加“[client]”选项和“[mysql]”选项,并使用这两个选项下的“socket”参数值,与“[mysqld]”选项下的“socket”参数值,指向的socket文件路径完全一致。如下: [mysqld]
datadir=/storage/db/mysql
socket=/storage/db/mysql/mysql.sock
...省略n行(爱E族)...

[client]
default-character-set=utf8
socket=/storage/db/mysql/mysql.sock

[mysql]
default-character-set=utf8
socket=/storage/db/mysql/mysql.sock修改完后,重启mysqld服务,即可解决此问题。
 解决方案二:  使用“ln -s /storage/db/mysql/mysql.sock /var/lib/mysql/mysql.sock”命令,将正确的socket文件位置,软链接到提示错误的socket文件路径位置,即可解决此问题:[root@aiezu.com ~]# ls /var/lib/mysql/mysql.sock
ls: cannot access /var/lib/mysql/mysql.sock: No such file or directory
[root@aiezu.com ~]# ln -s /storage/db/mysql/mysql.sock /var/lib/mysql/mysql.sock
[root@aiezu.com ~]# ls /var/lib/mysql/mysql.sock
/var/lib/mysql/mysql.sock   五、后序:  这篇文章只讲述了mysql提供的“mysql”、“mysqldump”、“mysqladmin”等命令提示“ERROR 2002 (HY000): Can't connect to local MySQL server through socket '***' (2)”的解决方法,如果需要解决“php”、“perl”、“python”等脚本语言提示此错误的问题,请参考爱E族的另外一篇文章:http://aiezu.com/article/mysql_php_connect_through_socket.html 查看全部
  有时候,当我们使用“mysql”、“mysqladmin”、“mysqldump”等命令管理数据库时,服务器抛出类似如下错误:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
这个错误是由于什么原因导致的呢?请看后面爱E族(aiezu.com)为您提供的分析。

 

一、错误现场还原:

下面我们通过三种方式来连接,然后观察提示的错误信息:
  • 1、直接使用“mysql”命令,不带主机名参数;
  • 2、使用带了主机名“localhost”参数的“mysql -h localhost”命令;
  • 3、使用带了主机名“127.0.0.1”参数的“mysql -h 127.0.0.1”命令。
[root@aiezu.com ~]# mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
[root@aiezu.com ~]# mysql -h localhost
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
[root@aiezu.com ~]# mysql -h 127.0.0.1
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
  通过上面实验可以看出,前面两种方式都能产生标题中的错误,而第三种方式连接是不会产生标题中的错误的(第三种方式这里产生的是由于密码问题拒绝访问的错误信息)(爱E族)。

 

二、错误产生原因解析:

   这是由于我们连接数据库使用的主机名参数为“localhost”,或者未使用主机名参数、服务器默认使用“localhost”做为主机名(爱E族)。 使用主机名参数为“localhost”连接mysql服务端时,mysql客户端会认为是连接本机,所以会尝试以socket文件方式进行连接(socket文件连接方式,比“ip:端口”方式效率更高),这时根据配置文件“/etc/my.cnf”的路径,未找到相应的socket文件,就会引发此错误。
   

三、修复故障前准备:

1、看mysql服务是否在运行:

  由于“socket”文件是由mysql服务运行时创建的,如果提示“ERROR 2002 (HY000): Can't connect to local MySQL server through socket '***' (2)”,找不到“socket”文件,我们首先要确认的是mysql服务是否正在运行。
# 1、 端口是否打开
[root@aiezu.com ~]# lsof -i:3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 12207 mysql 14u IPv4 52350 0t0 TCP *:mysql (LISTEN)

# 2、mysqld服务是否正在运行
[root@aiezu.com ~]# service mysqld status
mysqld (pid 4717) is running...

# 3、如果mariadb,同样方法查服务是否正在运行:
[root@aiezu.com ~]# service mariadb status
Redirecting to /bin/systemctl status mariadb.service
● mariadb.service - MariaDB database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
Active: active (running) since 四 2016-11-03 13:47:37 CST; 23min ago
  

2、确定“socket”文件正确位置:

  确定mysql服务正常运行后,产生此错误的原因只剩下“socket”文件路径不正确了,我们可以使用“find”命令或者“lsof”命令来确定socket文件的正确路径:
[root@aiezu.com ~]# lsof  -c mysqld|grep sock$
mysqld 4717 mysql 12u unix 0xffff88010a655b80 0t0 77474827 /storage/db/mysql/mysql.sock

[root@aiezu.com ~]# find / -name '*.sock'
/storage/db/mysql/mysql.sock
 

四、故障解决方法:

解决方案一:

  修改“/etc/my.cnf”配置文件,在配置文件中添加“[client]”选项和“[mysql]”选项,并使用这两个选项下的“socket”参数值,与“[mysqld]”选项下的“socket”参数值,指向的socket文件路径完全一致。如下: 
[mysqld]
datadir=/storage/db/mysql
socket=/storage/db/mysql/mysql.sock
...省略n行(爱E族)...

[client]
default-character-set=utf8
socket=/storage/db/mysql/mysql.sock

[mysql]
default-character-set=utf8
socket=/storage/db/mysql/mysql.sock
修改完后,重启mysqld服务,即可解决此问题。
 

解决方案二:

  使用“ln -s /storage/db/mysql/mysql.sock /var/lib/mysql/mysql.sock”命令,将正确的socket文件位置,软链接到提示错误的socket文件路径位置,即可解决此问题:
[root@aiezu.com ~]# ls /var/lib/mysql/mysql.sock
ls: cannot access /var/lib/mysql/mysql.sock: No such file or directory
[root@aiezu.com ~]# ln -s /storage/db/mysql/mysql.sock /var/lib/mysql/mysql.sock
[root@aiezu.com ~]# ls /var/lib/mysql/mysql.sock
/var/lib/mysql/mysql.sock

  

 五、后序:

  这篇文章只讲述了mysql提供的“mysql”、“mysqldump”、“mysqladmin”等命令提示“ERROR 2002 (HY000): Can't connect to local MySQL server through socket '***' (2)”的解决方法,如果需要解决“php”、“perl”、“python”等脚本语言提示此错误的问题,请参考爱E族的另外一篇文章:http://aiezu.com/article/mysql_php_connect_through_socket.html

CentOS 7上如何修改主机名?

CentOSliuliangsong 发表了文章 • 0 个评论 • 310 次浏览 • 2016-11-02 10:47 • 来自相关话题

  在CentOS 7中,修改主机名的方法和以前版本已经不同、CentOS 7引入了全新的主机名体系。CentOS 7定义了三种主机名:静态的(static)、瞬态的(transient)、和灵活的(pretty)。
“静态”主机名也称为“内核主机名”,是系统在启动时自动从“/etc/hostname”文件初始化的主机名。“瞬态”主机名是在系统运行时临时分配的主机名。如由“DHCP”或“mDNS”服务器分配。“灵活”主机名允许使用特殊字符(包括空格)的主机名,而其他两种都必须遵从“互联网域名”字符限制规则。
 
一、查看主机名:
  可以使用“hostnamectl status --static|transient|pretty”(三个参数选一个)分别查看对应类型的主机名:hostnamectl status --static #查看静态主机名
hostnamectl status --transient #查看瞬态主机
hostnamectl status --pretty #查看灵活主机名
二、修改主机名:
1、同时修改三种类型的主机名:
  我们这里先将主机名设置成本站的域名“aiezu.com”(爱E族),并在“aiezu.com”前后加上一个特殊字符,使用“%aiezu.com%”做为主机名。修改后,再分别查看三种类型修改后的主机名。hostnamectl set-hostname %Aiezu.com%
#查看修改后的状态:
hostnamectl status --static
#aiezu.com
hostnamectl status --transient
#aiezu.com
hostnamectl status --pretty
#%Aiezu.com%从上面可以看出,前面两种主机名中的特殊字符被删除,大写字母被转变为小写,只有最后的灵活主机名保留了原来的完整主机名字符串。
 
2、分别修改三种类型的主机名:
  如果只希望分别修改三种类型的主机名,可以这样修改:#修改静态主机名
hostnamectl set-hostname --static aiezu.com

#修改瞬态主机
hostnamectl set-hostname --transient aiezu.com

#修改灵活主机名
hostnamectl set-hostname --pretty aiezu.com
 3、更新hosts文件:
修改主机名后需要更新“/etc/hosts”文件,否则系统无法根据设置的主机名找到是本机“127.0.0.1”。127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6修改为:127.0.0.1 aiezu.com localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 aiezu.com localhost localhost.localdomain localhost6 localhost6.localdomain6 
三、修改后效果:
1、命令提示符效果:
  设置主机名后,无需重启,使用“su -”重新登录后、就能在命令提示符上看到主机名(命令提示符使用的是“静态主”机名)。我们设置的是域名“aiezu.com”做为主机名,所以只会显示域名的主机名部分。[root@localhost ~]# hostnamectl set-hostname aiezu.com
[root@localhost ~]# su -
上一次登录:三 11月 2 02:17:43 CST 2016从 10.0.0.52pts/0 上
[root@aiezu ~]#2、hostname命令:[root@aiezu ~]# hostname
aiezu.com3、“/etc/hostname”文件:[root@aiezu ~]# cat /etc/hostname
aiezu.com 
四、总结:
介绍那么多,CentOS 7修改主机名,就一条命令,再修改“/etc/hosts”文件就行:hostnamectl set-hostname aiezu.com
# su - 查看全部
  在CentOS 7中,修改主机名的方法和以前版本已经不同、CentOS 7引入了全新的主机名体系。CentOS 7定义了三种主机名:静态的(static)、瞬态的(transient)、和灵活的(pretty)。
  • “静态”主机名也称为“内核主机名”,是系统在启动时自动从“/etc/hostname”文件初始化的主机名。
  • “瞬态”主机名是在系统运行时临时分配的主机名。如由“DHCP”或“mDNS”服务器分配。
  • “灵活”主机名允许使用特殊字符(包括空格)的主机名,而其他两种都必须遵从“互联网域名”字符限制规则。

 
一、查看主机名:
  可以使用“hostnamectl status --static|transient|pretty”(三个参数选一个)分别查看对应类型的主机名:
hostnamectl status --static #查看静态主机名
hostnamectl status --transient #查看瞬态主机
hostnamectl status --pretty #查看灵活主机名

二、修改主机名:
1、同时修改三种类型的主机名:
  我们这里先将主机名设置成本站的域名“aiezu.com”(爱E族),并在“aiezu.com”前后加上一个特殊字符,使用“%aiezu.com%”做为主机名。修改后,再分别查看三种类型修改后的主机名。
hostnamectl set-hostname %Aiezu.com%
#查看修改后的状态:
hostnamectl status --static
#aiezu.com
hostnamectl status --transient
#aiezu.com
hostnamectl status --pretty
#%Aiezu.com%
从上面可以看出,前面两种主机名中的特殊字符被删除,大写字母被转变为小写,只有最后的灵活主机名保留了原来的完整主机名字符串。
 
2、分别修改三种类型的主机名:
  如果只希望分别修改三种类型的主机名,可以这样修改:
#修改静态主机名
hostnamectl set-hostname --static aiezu.com

#修改瞬态主机
hostnamectl set-hostname --transient aiezu.com

#修改灵活主机名
hostnamectl set-hostname --pretty aiezu.com

 3、更新hosts文件:
修改主机名后需要更新“/etc/hosts”文件,否则系统无法根据设置的主机名找到是本机“127.0.0.1”。
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
修改为:
127.0.0.1   aiezu.com localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 aiezu.com localhost localhost.localdomain localhost6 localhost6.localdomain6
 
三、修改后效果:
1、命令提示符效果:
  设置主机名后,无需重启,使用“su -”重新登录后、就能在命令提示符上看到主机名(命令提示符使用的是“静态主”机名)。我们设置的是域名“aiezu.com”做为主机名,所以只会显示域名的主机名部分。
[root@localhost ~]# hostnamectl set-hostname aiezu.com
[root@localhost ~]# su -
上一次登录:三 11月 2 02:17:43 CST 2016从 10.0.0.52pts/0 上
[root@aiezu ~]#
2、hostname命令:
[root@aiezu ~]# hostname
aiezu.com
3、“/etc/hostname”文件:
[root@aiezu ~]# cat /etc/hostname 
aiezu.com
 
四、总结:
介绍那么多,CentOS 7修改主机名,就一条命令,再修改“/etc/hosts”文件就行:
hostnamectl set-hostname aiezu.com
# su -

CentOS 7中使用Yum安装MariaDB数据库

CentOSliuliangsong 发表了文章 • 0 个评论 • 768 次浏览 • 2016-11-01 21:34 • 来自相关话题

  自CentOS 7.0起,CentOS中使用MariaDB代替以前版本的MySQL。MariaDB是MySQL的一个分支,由开源社区维护。MariaDB采用GPL授权许可,MariaDB的完全兼容MySQL,包括API、SQL语法、命令行,使之轻松成为MySQL代替品。
 
一、实验环境:操作系统:CentOS 7.0 64位(最小安装)MariaDB版本:系统自带(mariadb-5.5.50-1.el7_2)
 
二、安装前准备:
  爱E族提醒您,安装前需检查是否已经安装了Mysql数据库或者MariaDB数据库,如果已经安装,需先卸载。并需要检查3306端口是否已经被占用:
检查是否安装mysql服务:#检查是否安装mysql
rpm -qa|grep mysql-server
#如果已经安装,则卸载(爱E族aiezu.com)
yum remove mysql
yum remove mysql-server检查是否已安装mariadb:#检查是否安装mariadb
rpm -qa|grep mariadb
#如果已经安装,则卸载
yum remove mariadb-server
yum remove mariadb检查3306端口(MariaDB服务端口)是否已被占有:lsof -i :3306爱E族提醒:如果未来到lsof命令,请运行“yum -y install lsof”安装“lsof”命令;
 
三、开始安装MariaDB:
1、更新系统:
安装前运行“yum -y update”更新下系统是非常有必要的,有利于减少系统漏洞。yum -y update2、安装mariadb数据库:yum -y install mariadb mariadb-server如果一切顺利,mariadb就已经安装好了,下步就是配置mariadb了(爱E族)
 
四、配置MariaDB:
1、启动MariaDB数据库://启动服务
service mariadb start
//查看运行状态(爱E族)
service mariadb status2、设置MariaDB数据库的root密码://设置密码:输入下面命令,回车后输入两次新密码
mysqladmin password
//修改密码:输入下面命令,回车后输入旧密码,再回车输入两次新密码
mysqladmin -p password3、还可以运行“mysql_secure_installation”配置MariaDB,运行命令后,屏幕输出以下内容,要求交互选择“Y/n”,具体的交互包括:1、输入当前密码(默认为空直接回车);2、是否修改当前密码,建议修改;3、是否删除匿名帐号,建议删除;4、是否禁止root帐号远程登录,默认只运行root本机登录,建议禁止,确保安全;5、是否删除“test”数据库,看个人自己选择;6、重新加载表权限,选Y。/usr/bin/mysql_secure_installation:行379: find_mysql_client: 未找到命令

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here(aiezu.com).

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n] n
... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, (http://aiezu.com)and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
... Success!

Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
- Dropping test database...
ERROR 1008 (HY000) at line 1: Can't drop database 'test'; database doesn't exist
... Failed! Not critical, keep moving...
- Removing privileges on test database...
... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
... Success!

Cleaning up...

All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB! 
五、登录数据库:
1、登录到mariadb数据库://运行下面命令,并输入刚才修改的密码
mysql -uroot -p2、添加一个名称为"aiezu"的帐号:--创建一个只允许本机登录的帐号“aiezu”(爱E族),其中“your_password”为帐号的密码;
--如果创建允许远程登录的帐号,请将“localhost”改成“%”
CREATE USER 'aiezu'@'localhost' IDENTIFIED BY 'your_password';
--CREATE USER 'aiezu'@'%' IDENTIFIED BY 'your_password';3、创建一个名称为“aiezu_db”的数据库:create database aiezu_db default character set 'utf8';4、将库“aiezu_db”的所有权限给予用户“aiezu”:--授权给aiezu(aiezu.com)
grant all privileges on aiezu_db.* to 'aiezu'@'localhost';
--刷新权限
flush privileges;5、退出到bash shell,使用创建的用户“aiezu”登录到“aiezu_db”库://输入下面一条命令回车后输入创建用时使用的密码,这里上面使用的是“your_password”
mysql -u aiezu -p
//登录后use aiezu_db 
六、防火墙开启数据库3306端口:
CentOS 7默认防火墙使用的是“firewalld”。运行下面代码,在防火墙“firewalld”中开启公网访问MariaDB数据库3306端口:systemctl restart firewalld
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload 查看全部
  自CentOS 7.0起,CentOS中使用MariaDB代替以前版本的MySQL。MariaDB是MySQL的一个分支,由开源社区维护。MariaDB采用GPL授权许可,MariaDB的完全兼容MySQL,包括API、SQL语法、命令行,使之轻松成为MySQL代替品。
 
一、实验环境:
  • 操作系统:CentOS 7.0 64位(最小安装)
  • MariaDB版本:系统自带(mariadb-5.5.50-1.el7_2)

 
二、安装前准备:
  爱E族提醒您,安装前需检查是否已经安装了Mysql数据库或者MariaDB数据库,如果已经安装,需先卸载。并需要检查3306端口是否已经被占用:
检查是否安装mysql服务:
#检查是否安装mysql
rpm -qa|grep mysql-server
#如果已经安装,则卸载(爱E族aiezu.com)
yum remove mysql
yum remove mysql-server
检查是否已安装mariadb:
#检查是否安装mariadb
rpm -qa|grep mariadb
#如果已经安装,则卸载
yum remove mariadb-server
yum remove mariadb
检查3306端口(MariaDB服务端口)是否已被占有:
lsof -i :3306
爱E族提醒:如果未来到lsof命令,请运行“yum -y install lsof”安装“lsof”命令;
 
三、开始安装MariaDB:
1、更新系统:
安装前运行“yum -y update”更新下系统是非常有必要的,有利于减少系统漏洞。
yum -y update
2、安装mariadb数据库:
yum -y install mariadb mariadb-server
如果一切顺利,mariadb就已经安装好了,下步就是配置mariadb了(爱E族)
 
四、配置MariaDB:
1、启动MariaDB数据库:
//启动服务
service mariadb start
//查看运行状态(爱E族)
service mariadb status
2、设置MariaDB数据库的root密码:
//设置密码:输入下面命令,回车后输入两次新密码
mysqladmin password
//修改密码:输入下面命令,回车后输入旧密码,再回车输入两次新密码
mysqladmin -p password
3、还可以运行“mysql_secure_installation”配置MariaDB,运行命令后,屏幕输出以下内容,要求交互选择“Y/n”,具体的交互包括:1、输入当前密码(默认为空直接回车);2、是否修改当前密码,建议修改;3、是否删除匿名帐号,建议删除;4、是否禁止root帐号远程登录,默认只运行root本机登录,建议禁止,确保安全;5、是否删除“test”数据库,看个人自己选择;6、重新加载表权限,选Y。
/usr/bin/mysql_secure_installation:行379: find_mysql_client: 未找到命令

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here(aiezu.com).

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

You already have a root password set, so you can safely answer 'n'.

Change the root password? [Y/n] n
... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, (http://aiezu.com)and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
... Success!

Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
- Dropping test database...
ERROR 1008 (HY000) at line 1: Can't drop database 'test'; database doesn't exist
... Failed! Not critical, keep moving...
- Removing privileges on test database...
... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
... Success!

Cleaning up...

All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
 
五、登录数据库:
1、登录到mariadb数据库:
//运行下面命令,并输入刚才修改的密码
mysql -uroot -p
2、添加一个名称为"aiezu"的帐号:
--创建一个只允许本机登录的帐号“aiezu”(爱E族),其中“your_password”为帐号的密码;
--如果创建允许远程登录的帐号,请将“localhost”改成“%”
CREATE USER 'aiezu'@'localhost' IDENTIFIED BY 'your_password';
--CREATE USER 'aiezu'@'%' IDENTIFIED BY 'your_password';
3、创建一个名称为“aiezu_db”的数据库:
create database aiezu_db default character set 'utf8';
4、将库“aiezu_db”的所有权限给予用户“aiezu”:
--授权给aiezu(aiezu.com)
grant all privileges on aiezu_db.* to 'aiezu'@'localhost';
--刷新权限
flush privileges;
5、退出到bash shell,使用创建的用户“aiezu”登录到“aiezu_db”库:
//输入下面一条命令回车后输入创建用时使用的密码,这里上面使用的是“your_password”
mysql -u aiezu -p
//登录后use aiezu_db
 
六、防火墙开启数据库3306端口:
CentOS 7默认防火墙使用的是“firewalld”。运行下面代码,在防火墙“firewalld”中开启公网访问MariaDB数据库3306端口:
systemctl restart firewalld
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload