[参考链接]
[1] http://blog.csdn.net/chenpy/article/details/47046113
[2] https://www.zybuluo.com/oro-oro/note/310783

方法一:

(1) 停止mysql服务

1
service mysqld stop

(2) 移动数据到数据盘目录

1
2
3
mkdir -p /data/mysql
chown -R mysql:mysql /data
mv /usr/local/mysql/data/* /data/mysql/

(3) 修改配置/etc/my.cnf

提示:以下配置为示例,修改以实际情况为准,将/usr/local/mysql修改为/data/mysql,如:

datadir = /data/mysql
socket = /data/mysql/mysql.sock
log_error = /data/mysql/mysql-error.log
slow_query_log_file = /data/mysql/mysql-slow.log

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
[mysqld]
datadir = /data/mysql
port = 3306
server_id = 1
socket = /data/mysql/mysql.sock
default_storage_engine = InnoDB
#INNODB
innodb_buffer_pool_size = 4G
innodb_log_file_size = 8M
innodb_file_per_table = 1
innodb_flush_method = O_DIRECT
#MyISAM
key_buffer_size = 64M
#LOGGING
log_error = /data/mysql/mysql-error.log
slow_query_log = 1
slow_query_log_file = /data/mysql/mysql-slow.log
#OTHER
tmp_table_size = 64M
max_heap_table_size = 64M
query_cache_type = 1
query_cache_size = 64M
max_connections = 1000
thread_cache_size = 256
table_open_cache = 10000
open_files_limit = 65535
innodb_thread_concurrency = 4
skip_name_resolve
character_set_server=utf8
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[client]
socket = /data/mysql/mysql.sock
port = 3306
host = localhost

方法二:

使用linux下的软连接方法,具体操作如下:(以迁移到/data/mysql/目录为例)

(1) 停止mysql服务

1
service mysqld stop

(2) 移动数据到数据盘目录

1
2
3
mkdir -p /data/mysql
chown -R mysql:mysql /data
mv /usr/local/mysql/data/* /data/mysql/

(3) 创建软连接/usr/local/mysql/data指向/data/mysql/目录

1
2
rm /usr/local/mysql/data //删除原有的data目,然后创建data软链接
ln -s /data/mysql/ /usr/local/mysql/data

(4) 启动mysql服务

1
service mysqld start

常见问题

(1) 首先迁移目标目录的权限问题

1
ERROR! The server quit without updating PID file

这个是权限问题,mysql没有这个目录下的权限
因为刚复制过来的mysql文件的拥有者是root,所以要改变该目录的拥有者,执行下面命令来改变
chown -R mysql:mysql /data/mysql/

(2) 用mysql客户端连接不上服务器

1
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'

其实是你的mysql的配置文件没有配置正确。
mysql启动如果没有读到

1
2
3
4
[client]
socket = /data/mysql/mysql.sock
port = 3306
host = localhost

这些配置,则mysql会默认找 /var/lib/mysql/mysql.sock文件,
如果要解决这个问题就需要把上面的东西加入到你的/etc/my.cnf配置文件中。

下面普及下mysql的有关配置文件的知识,以前我也是迷迷糊糊,现在搞清楚了一些。
用 service mysql start 命令启动mysql,mysql会默认找/etc/my.cnf 配置文件,如果没有找到,则会按照默认的启动目录来启动mysql
就是【/var/lib/mysql】
会在此目录下生成 10-4-19-161.pid 类似的pid文件 和 sock文件【mysql.sock】
但是如果你建立的了my.cnf 文件则mysql会按照你的配置文件来启动mysql。

(3) 用户密码过期问题

1
Your password has expired. To log in you must change it using a client that supports expired passwords

则需要修改 mysql的用户表
刚开始以为修改用户密码就可以解决密码过期的问题,其实不是的。需要修改msyql.user表的 password_expired值
Y表示已经过期,需要修改成N。
首先在本机进入mysql

1
2
3
4
5
6
7
8
9
10
11
12
> mysql -uroot -pxxxxx
> use mysql
> select host,user,password_expired from user;
+-------------+----------+------------------+
| host | user | password_expired |
+-------------+----------+------------------+
| localhost | root | Y |
| 10-4-19-161 | root | Y |
| 127.0.0.1 | root | Y |
| localhost | data | N |
| 127.0.0.1 | shangbao | N |
+-------------+----------+------------------+

如果有些是Y,则需要吧哪些是Y的改为N。
update set user.password_expired = ‘N’ where user.user = ‘root’;
root是你密码过期的用户

然后刷新权限

1
mysql> flush privileges;

因为mysql的权限是启动的时候缓存起来的,如果修改的用户的权限,需要手动刷新用户权限才会生效。

编译动态共享库

保存下述代码为 sublime_imfix.c 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/*
sublime_imfix.c
Use LD_PRELOAD to interpose some function to fix sublime input method support for linux.
By Cjacker Huang <jianzhong.huang at i-soft.com.cn>
gcc -shared -o libsublime-imfix.so sublime_imfix.c `pkg-config --libs --cflags gtk+-2.0` -fPIC
LD_PRELOAD=./libsublime-imfix.so sublime_text
*/
#include <gtk/gtk.h>
#include <gdk/gdkx.h>
typedef GdkSegment GdkRegionBox;
struct _GdkRegion
{
long size;
long numRects;
GdkRegionBox *rects;
GdkRegionBox extents;
};
GtkIMContext *local_context;
void
gdk_region_get_clipbox (const GdkRegion *region,
GdkRectangle *rectangle)
{
g_return_if_fail (region != NULL);
g_return_if_fail (rectangle != NULL);
rectangle->x = region->extents.x1;
rectangle->y = region->extents.y1;
rectangle->width = region->extents.x2 - region->extents.x1;
rectangle->height = region->extents.y2 - region->extents.y1;
GdkRectangle rect;
rect.x = rectangle->x;
rect.y = rectangle->y;
rect.width = 0;
rect.height = rectangle->height;
//The caret width is 2;
//Maybe sometimes we will make a mistake, but for most of the time, it should be the caret.
if(rectangle->width == 2 && GTK_IS_IM_CONTEXT(local_context)) {
gtk_im_context_set_cursor_location(local_context, rectangle);
}
}
//this is needed, for example, if you input something in file dialog and return back the edit area
//context will lost, so here we set it again.
static GdkFilterReturn event_filter (GdkXEvent *xevent, GdkEvent *event, gpointer im_context)
{
XEvent *xev = (XEvent *)xevent;
if(xev->type == KeyRelease && GTK_IS_IM_CONTEXT(im_context)) {
GdkWindow * win = g_object_get_data(G_OBJECT(im_context),"window");
if(GDK_IS_WINDOW(win))
gtk_im_context_set_client_window(im_context, win);
}
return GDK_FILTER_CONTINUE;
}
void gtk_im_context_set_client_window (GtkIMContext *context,
GdkWindow *window)
{
GtkIMContextClass *klass;
g_return_if_fail (GTK_IS_IM_CONTEXT (context));
klass = GTK_IM_CONTEXT_GET_CLASS (context);
if (klass->set_client_window)
klass->set_client_window (context, window);
if(!GDK_IS_WINDOW (window))
return;
g_object_set_data(G_OBJECT(context),"window",window);
int width = gdk_window_get_width(window);
int height = gdk_window_get_height(window);
if(width != 0 && height !=0) {
gtk_im_context_focus_in(context);
local_context = context;
}
gdk_window_add_filter (window, event_filter, context);
}

编译动态库

编译之前请安装编译环境和GTK,apt-get安装如下:

1
2
# sudo apt-get install build-essential
# sudo apt-get install libgtk2.0-dev

编译动态库,然后将编译的文件libsublime-imfix.so拷贝到Sublime Text 2安装目录下

1
2
# sudo gcc -shared -o libsublime-imfix.so sublime_imfix.c `pkg-config --libs --cflags gtk+-2.0` -fPIC
# mv libsublime-imfix.so /opt/sublime

启动 Sublime Text 2

进入Sublime Text 2安装目录,执行下述命令启动 Sublime Text 2,查看是否可以使用输入中文

1
2
# cd /opt/sublime
# LD_PRELOAD=./libsublime-imfix.so ./sublime_text

报错:

1
ERROR: ld.so: object 'libsublime-imfix.so' from LD_PRELOAD cannot be preloaded (cannot open shared object file): ignored.

解决方法:
注意:路径要写完整的绝对路径,启动命令修改为

1
# LD_PRELOAD=/opt/sublime/libsublime-imfix.so ./sublime_text

启动Sublime Text 2后,便可输入中文,但是为了不用每次输入一长串命令启动Sublime Text,自己编写一个启动脚本并将修改desktop文件

编写Sublime Text 2启动脚本

编写Sublime Text 2启动脚本/usr/bin/subl

1
2
3
4
5
6
7
8
9
# vim /usr/bin/subl
#!/bin/bash
SUBLIME_HOME="/opt/sublime"
LD_LIB=$SUBLIME_HOME/libsublime-imfix.so
sh -c "LD_PRELOAD=$LD_LIB $SUBLIME_HOME/sublime_text $@"
# chmod 755 /usr/bin/subl

修改Sublime Text 2启动方式

编辑Sublime Text 2 desktop文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# vim /usr/share/applications/sublime.desktop
[Desktop Entry]
Name=SublimeText 2
GenericName=Text Editor
Exec=subl
Terminal=false
Icon=/opt/sublime/Icon/48x48/sublime_text.png
Type=Application
Categories=TextEditor;IDE;Development
X-Ayatana-Desktop-Shortcuts=NewWindow
[NewWindow Shortcut Group]
Name=New Window
Exec=subl -n
TargetEnvironment=Unity

参考链接

MySQL 数据库字段类型

MySQL 的字段类型主要有三种:字符串类型、数值类型、日期和时间类型

字符串类型

  • CHAR(size)
    保存固定长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的长度。最多 255 个字符。

  • VARCHAR(size)
    保存可变长度的字符串(可包含字母、数字以及特殊字符)。在括号中指定字符串的最大长度。最多 255 个字符。

  • TINYTEXT
    存放最大长度为 255 个字符的字符串。

  • TINYBLOB
    用于 BLOBs (Binary Large OBjects)。存放最多 255 字节的数据。

  • TEXT
    存放最大长度为 65,535 个字符的字符串。

  • BLOB
    用于 BLOBs (Binary Large OBjects)。存放最多 65,535 字节的数据。

  • MEDIUMTEXT
    存放最大长度为 16,777,215 个字符的字符串。

  • MEDIUMBLOB
    用于 BLOBs (Binary Large OBjects)。存放最多 16,777,215 字节的数据。

  • LONGTEXT
    存放最大长度为 4,294,967,295 个字符的字符串。

  • LONGBLOB
    用于 BLOBs (Binary Large OBjects)。存放最多 4,294,967,295 字节的数据。

  • ENUM(x,y,z,etc.)
    允许你输入可能值的列表。可以在 ENUM 列表中列出最大 65535 个值。如果列表中不存在插入的值,则插入空值。

  • SET
    与 ENUM 类似,SET 最多只能包含 64 个列表项,不过 SET 可存储一个以上的值。

数值类型

  • TINYINT(size)
    -128 到 127 常规。0 到 255 无符号。在括号中规定最大位数。

  • SMALLINT(size)
    -32768 到 32767 常规。0 到 65535 无符号。在括号中规定最大位数。

  • MEDIUMINT(size)
    -8388608 到 8388607 普通。0 到 16777215 无符号。在括号中规定最大位数。

  • INT(size)
    -2147483648 到 2147483647 常规。0 到 4294967295 无符号。在括号中规定最大位数。

  • BIGINT(size)
    -9223372036854775808 到 9223372036854775807 常规。0 到 18446744073709551615 无符号。在括号中规定最大位数。

  • FLOAT(size,d)
    带有浮动小数点的小数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。

  • DOUBLE(size,d)
    带有浮动小数点的大数字。在括号中规定最大位数。在 d 参数中规定小数点右侧的最大位数。

  • DECIMAL(size,d)
    作为字符串存储的 DOUBLE 类型,允许固定的小数点。

日期和时间类型

日期和时间列类型用于处理时间数据,可以存储当日的时间或出生日期这样的数据。格式的规定:Y表示年、M(前M)表示月、D表示日、H表示小时、M(后M)表示分钟、S表示秒。下面是 MySQL 中可用的日期和时间列类型:

  • DATE()
    日期。
    格式:YYYY-MM-DD
    范围: ‘1000-01-01’ 到 ‘9999-12-31’

  • TIME()
    时间。
    格式:HH:MM:SS
    范围: ‘-838:59:59’ 到 ‘838:59:59’

  • YEAR()
    2 位或 4 位格式的年。格式:YY 或 YYYY
    2 位格式 YY 范围:70 到 69,表示从 1970 到 2069
    4 位格式 YYYY 范围:1901 到 2155

  • DATETIME()
    日期和时间的组合。
    格式:YYYY-MM-DD HH:MM:SS
    范围: ‘1000-01-01 00:00:00’ 到 ‘9999-12-31 23:59:59’

  • TIMESTAMP()
    时间戳。TIMESTAMP 值使用 Unix 纪元(‘1970-01-01 00:00:00’ UTC) 至今的描述来存储。
    格式:YYYY-MM-DD HH:MM:SS
    范围: ‘1970-01-01 00:00:01’ UTC 到 ‘2038-01-09 03:14:07’ UTC

安装步骤

下载MySQL二进制包

下载地址: mysql-5.6.28-linux-glibc2.5-x86_64.tar.gz

创建用户和组

1
2
[root@shark]# groupadd mysql
[root@shark]# useradd -r -g mysql mysql

解压安装MySQL

1
2
3
[root@shark]# cd /usr/local
[root@shark]# tar -zxvf mysql-5.6.28-linux-glibc2.5-x86_64.tar.gz
[root@shark]# mv mysql-5.6.20-linux-glibc2.5-i686 mysql

修改MySQL的各级文件夹和文件的创建者、创建组为mysql

1
2
3
[root@shark]# cd /usr/local/mysql
[root@shark]# chown -R mysql .
[root@shark]# chgrp -R mysql .

提示:”.”代表的就是当前目录,选项-R表示递归当前目录及其子目录

初始化MySQL

1
2
[root@shark]# scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
[root@shark]# cp support-files/mysql.server /etc/init.d/mysqld

提示:初始化时,有可能会报错误,安装需要的包即可:libstdc++.so.6和libaio.so.1和libncurses.so.5

修改配置文件

1
2
[root@shark]# cp support-files/my-default.cnf /etc/my.cnf (5.6.x复制my-default.cnf,5.5.x复制my-medium.cnf)
[root@shark]# vim /etc/my.cnf

在[mysqld]中添加:

1
2
3
4
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
server_id = 1

启动mySQL服务

1
[root@shark]# service mysqld start

登陆MySQL并且删除空用户,并设置root账户密码,开启root远程访问权限等

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@shark]# mysql -uroot
……
mysql> use mysql;
mysql> SELECT user, host, password FROM mysql.user;
+------+-----------+----------+
| user | host | password |
+------+-----------+----------+
| root | localhost | |
| root | 10-4-5-9 | |
| root | 127.0.0.1 | |
| root | ::1 | |
| | localhost | |
| | 10-4-5-9 | |
+------+-----------+----------+
6 rows in set (0.00 sec)
mysql> UPDATE mysql.user set password = PASSWORD('123456') WHERE user = 'root';
mysql> GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "123456";  //为root添加远程连接的能力,123456为root账户密码
mysql> DROP USER ''@localhost;
mysql> FLUSH PRIVILEGES;

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment