飘易博客(作者:Flymorn)
订阅《飘易博客》RSS,第一时间查看最新文章!
飘易首页 | 留言本 | 关于我 | 订阅Feed

LNMP更改默认mysql数据存放到数据盘

Author:飘易 Source:飘易
Categories:Linux技术 PostTime:2015-4-3 22:28:41
正 文:
    如果您购买阿里云/腾讯云服务器,一般建议买一个数据盘,也就是系统盘和数据盘分开,将网站文件和Mysql数据库等都保存在数据盘,即使系统盘或者环境出问题,重置系统盘和重新配置环境,都不会影响数据盘的东西。

    配置好LNmp环境以后,默认的网站目录和数据库存放目录都在系统盘,所以我们需要将它们转移到数据盘。

更改网站文件目录
如果你使用的是军哥的lnmp安装包,那默认的虚拟主机配置环境在 /usr/local/nginx/conf/vhost/ 目录里,修改:

vi /usr/local/nginx/conf/vhost/域名.conf

可以打开对应的虚拟主机配置,然后修改其中的网站目录。然后执行:
cp -a 老目录 新目录
chown www:www -R 新目录

更改MySQL数据存放目录
1.停掉mysql服务器:
/etc/init.d/mysql stop

2.下面新目录以/storage/mysql/ 为例,然后复制旧目录的数据库到新目录:
cp -R /usr/local/mysql/var/* /storage/mysql/

3.将新目录赋权为mysql用户组:
chown mysql:mysql -R /storage/mysql/

4.再修改配置文件:
vi /etc/my.cnf

查找mysql数据原有目录 /usr/local/mysql/var 修改为:
datadir = /storage/mysql
innodb_data_home_dir = /storage/mysql
innodb_log_group_home_dir = /storage/mysql

5.启动mysql:
/etc/init.d/mysql start


    【补充说明】:阿里云、腾讯云服务器的硬盘是分两块,一个系统盘,一个数据盘,默认数据盘没有被挂载,所以除了系统和环境软件会安装在系统盘里,网站数据等也在系统盘里,数据盘却空置,没法利用其空间与区分系统和数据管理的好处。

这里做下说明,如何让网站数据存储在数据盘?

如果使用常用的LNmp一键安装包安装系统环境,网站根目录默认为: /home/wwwroot

有两个方法
1 . 直接挂载到目录/home/wwwroot
这个直接按阿里云官方的教程操作就可以了,只是需要建立目录 # mkdir /home/wwwroot

然后把 /mnt 替换为 /home/wwwroot 即可
LNMP更改默认mysql数据存放到数据盘

操作完上面这些,再安装LNmp一键包即可。

2 . 软件安装在系统盘,但网站数据放在数据盘
LNmp还是安装在系统盘里,阿里云服务器的数据盘挂载也按原来的操作
只要在添加网站时将默认目录修改成 /mnt 即可

这样的好处有两点:
1.  可以使用到更多的数据盘空间
2. 重装系统或环境不会影响网站数据,当然格式化数据盘也不会影响网站数据。

*另外也可以把数据盘再多分一个区,把其中一个分区挂载到数据库目录,比如/usr/local/mysql,方法同上。

*如果现在网站已经建在系统盘下了,还有办法迁移到数据盘吗?站点在home下,数据盘还可以加载到home目录吗?
当然可以,先将/home目录下的文件移动到其他目录,然后把数据盘挂载到/home,把数据移回即可


    【如果之前安装lnmp的时候,没有安装mysql innodb数据库引擎,怎么办呢?
1、如果你选择安装的是 mysql-5.5.37,那么只需要修改 /etc/my.cnf 配置文件即可
先看下 centos.sh 安装脚本是如何判断是否安装 innodb 的:
if [ $installinnodb = "y" ]; then
sed -i 's:#innodb:innodb:g' /etc/my.cnf
sed -i 's:/usr/local/mysql/data:/usr/local/mysql/var:g' /etc/my.cnf
else
sed '/skip-external-locking/i\default-storage-engine=MyISAM\nloose-skip-innodb' -i /etc/my.cnf
fi

    根据上面的命令,我们修改  /etc/my.cnf 即可:
a、找到 loose-skip-innodb 并注释掉:
default-storage-engine=MyISAM
#loose-skip-innodb
skip-external-locking

b、搜索 innodb 并取消innodb前面的注释:
# Uncomment the following if you are using InnoDB tables
innodb_data_home_dir = /usr/local/mysql/var
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /usr/local/mysql/var
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 16M
innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50

重启,mysql已经启用 innodb 引擎了:
LNMP更改默认mysql数据存放到数据盘

2、如果你不幸的选择了低版本的mysql 5.1.73并且没有选装 innodb,那么只有重新编译mysql了;当然你也可以升级mysql,在升级的时候,也可以安装innodb,但是一般不建议升级安装。
我们来看下centos.sh的原始编译的脚本:
cd mysql-5.1.73/
if [ $installinnodb = "y" ]; then
./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-assembler --with-mysqld-ldflags=-all-static --with-charset=utf8 --enable-thread-safe-client --with-big-tables --with-readline --with-ssl --with-embedded-server --enable-local-infile --with-plugins=innobase
else
./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-assembler --with-mysqld-ldflags=-all-static --with-charset=utf8 --enable-thread-safe-client --with-big-tables --with-readline --with-ssl --with-embedded-server --enable-local-infile
fi
make && make install

需要我们重新编译mysql,注意,重编译会导致原先的数据丢失,请先备份:
cd mysql-5.1.73/
./configure --prefix=/usr/local/mysql --with-extra-charsets=complex --enable-thread-safe-client --enable-assembler --with-mysqld-ldflags=-all-static --with-charset=utf8 --with-big-tables --with-readline --with-ssl --with-embedded-server --enable-local-infile --with-plugins=innobase
make && make install

注意,军哥的脚本里,这个参数:--enable-thread-safe-client出现了2次,请手动去掉一个。


【补充:关于innodb的独立表和共享表
1、共享表空间以及独占表空间都是针对数据的存储方式而言的。
共享表空间:  每一个数据库的所有的表数据,索引文件全部放在一个文件中,默认这个共享表空间的文件路径在data目录下。 默认的文件名为:ibdata1  初始化为10M。
独占表空间:  每一个表都将会生成以独立的文件方式来进行存储,每一个表都有一个.frm表描述文件,还有一个.ibd文件(这个文件包括了单独一个表的数据内容以及索引内容)。

2、共享表空间和独占表空间的区别
共享表空间:
优点:
1)可以放表空间分成多个文件存放到各个磁盘上(表空间文件大小不受表大小的限制,如一个表可以分布在不同的文件上)。
所以其大小限制不再是文件大小的限制,而是其自身的限制。从Innodb的官方文档中可以看到,其表空间的最大限制为64TB,也就是说,Innodb的单表限制基本上也在64TB左右了,当然这个大小是包括这个表的所有索引等其他相关数据。
2)表数据和表描述放在一起方便管理。 
缺点:
1)所有的数据和索引存放到一个文件中,将有一个很常大的文件,虽然可以把一个大文件分成多个小文件,但是多个表及索引在表空间中混合存储,这样对于一个表做了大量删除操作后表空间中将会有大量的空隙,特别是对于统计分析,日志系统这类应用最不适合用共享表空间。

独立表空间(在配置文件(my.cnf)中设置innodb_file_per_table=1):
优点:
1)每个表都有自已独立的表空间。
2)每个表的数据和索引都会存在自已的表空间中。
3)可以实现单表在不同的数据库中移动。
4)空间可以回收。
对于使用独立表空间的表,不管怎么删除,表空间的碎片不会太严重的影响性能,而且还有机会处理(表空不能自已回收),处理方式如下:
Drop table操作自动回收表空间
如果对于统计分析或是日志表,删除大量数据后可以通过:alter table TableName engine=innodb;回缩不用的空间
对于使innodb-plugin的Innodb使用turncate table也会使空间收缩
5)使用独占表空间的效率以及性能会更高一点。
缺点:
1)单表增加过大,如超过100个G:
当使用独享表空间来存放Innodb的表的时候,每个表的数据以一个单独的文件来存放,这个时候的单表限制,又变成文件系统的大小限制了。

开启innodb独立表方法:
先停止mysql服务器,然后修改my.cnf文件:
[mysqld] 
innodb-file-per-table=1

注意:在启用innodb_file_per_table=1后必须合理调整下innodb_open_files大小,此参数值,最小为10,默认为300,是全局参数,不能动态调整。

另外,centos下的日志文件路径在 /var/log 下:
btmp 或 btmp-20150515 (记录所有失败登录信息)
secure 或 secure-20150515 (包含验证和授权方面信息) 

之类的可能会有几百M甚至几个G,如果系统盘磁盘不足,可以删除这些日志文件。
日志说明
/var/log/messages — 包括整体系统信息,其中也包含系统启动期间的日志。此外,mail,cron,daemon,kern和auth等内容也记录在var/log/messages日志中。
/var/log/dmesg — 包含内核缓冲信息(kernel ring buffer)。在系统启动时,会在屏幕上显示许多与硬件有关的信息。可以用dmesg查看它们。
/var/log/auth.log — 包含系统授权信息,包括用户登录和使用的权限机制等。
/var/log/boot.log — 包含系统启动时的日志。
/var/log/daemon.log — 包含各种系统后台守护进程日志信息。
/var/log/dpkg.log – 包括安装或dpkg命令清除软件包的日志。
/var/log/kern.log – 包含内核产生的日志,有助于在定制内核时解决问题。
/var/log/lastlog — 记录所有用户的最近信息。这不是一个ASCII文件,因此需要用lastlog命令查看内容。
/var/log/maillog /var/log/mail.log — 包含来着系统运行电子邮件服务器的日志信息。例如,sendmail日志信息就全部送到这个文件中。
/var/log/user.log — 记录所有等级用户信息的日志。
/var/log/Xorg.x.log — 来自X的日志信息。
/var/log/alternatives.log – 更新替代信息都记录在这个文件中。
/var/log/btmp – 记录所有失败登录信息。使用last命令可以查看btmp文件。例如,”last -f /var/log/btmp | more“。
/var/log/cups — 涉及所有打印信息的日志。
/var/log/anaconda.log — 在安装Linux时,所有安装信息都储存在这个文件中。
/var/log/yum.log — 包含使用yum安装的软件包信息。
/var/log/cron — 每当cron进程开始一个工作时,就会将相关信息记录在这个文件中。
/var/log/secure — 包含验证和授权方面信息。例如,sshd会将所有信息记录(其中包括失败登录)在这里。
/var/log/wtmp或/var/log/utmp — 包含登录信息。使用wtmp可以找出谁正在登陆进入系统,谁使用命令显示这个文件或信息等。
/var/log/faillog – 包含用户登录失败信息。此外,错误登录命令也会记录在本文件中。
除了上述Log文件以外, /var/log还基于系统的具体应用包含以下一些子目录:
/var/log/httpd/或/var/log/apache2 — 包含服务器access_log和error_log信息。
/var/log/lighttpd/ — 包含light HTTPD的access_log和error_log。
/var/log/mail/ –  这个子目录包含邮件服务器的额外日志。
/var/log/prelink/ — 包含.so文件被prelink修改的信息。
/var/log/audit/ — 包含被 Linux audit daemon储存的信息。
/var/log/samba/ – 包含由samba存储的信息。
/var/log/sa/ — 包含每日由sysstat软件包收集的sar文件。
/var/log/sssd/ – 用于守护进程安全服务。
除了手动存档和清除这些日志文件以外,还可以使用logrotate在文件达到一定大小后自动删除。可以尝试用vi,tail,grep和less等命令查看这些日志文件

参考:
1、http://www.cmhello.com/change-lnmp-www-datadir.html
2、http://www.amznz.com/aliyun-mount-lnmp/
作者:飘易
来源:飘易
版权所有。转载时必须以链接形式注明作者和原始出处及本声明。
上一篇:LNMP状态管理命令和升级Nginx、MySQL/MariaDB、PHP说明
下一篇:windows环境下部署Apache、mysql、php环境--WAMP
0条评论 “LNMP更改默认mysql数据存放到数据盘”
No Comment .
发表评论
名称(*必填)
邮件(选填)
网站(选填)

记住我,下次回复时不用重新输入个人信息
© 2007-2019 飘易博客 Www.Piaoyi.Org 原创文章版权由飘易所有