linux安装mysql mysql5.7初始化数据库库这一步报错

MySQL有两种安装方式:源码包安装和二进制包安装。
这两种方式各有特色:二位制包安装不需编译,针对不同的平台有经过优化编译的不同的二进制文件以及 包格式,安装简单方便;源码包则必须先配置编译再安装,可以根据你所用的主机环境进行优化,选择最佳的配置值,安装定制更灵活。
一、Mysql源码安装
下载地址:
Linux下源码安装(eg:mysql-5.6.27.tar.gz ):
yum&install&-y&perl-Module-Install.noarch
mysql-5.6.27.tar.gz &&
CentOS release 6.5 (Final)
2:若未安装,安装cmake:
[root@tsxs&installfiles]#&tar&zxvf&cmake-3.3.2.tar.gz&&&
[root@tsxs&installfiles]#&cd&cmake-3.3.2&&
[root@tsxs&cmake-3.3.2]#&ls&&
Auxiliary&&CMakeCPack.cmake&CMakeGraphVizOptions.cmake&&CMakeLogo.gif&&&
CompileFlags.cmake&&CONTRIBUTING.rst&&CTestConfig.cmake&DartConfig.cmake&&Help&&&
Modules&&Source&Tests&bootstrap&&CMakeCPackOptions.cmake.in&&CMakeLists.txt&&
cmake_uninstall.cmake.in&&configure&Copyright.txt&CTestCustom.cmake.in&doxygen.config&&
Licenses&&README.rst&&Templates&&Utilities&&
[root@tsxs&cmake-3.3.2]#&./bootstrap&&&
[root@tsxs&cmake-3.3.2]#&make&&&
[root@tsxs&cmake-3.3.2]#&make&install&&
测试:输入有关cmake的使用命令:&
注:CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。 可以一次:make && make install
[root@tsxs&installfiles]#&cmake&--version&&
[root@tsxs&installfiles]#&cmake&--help&&
数据库添加用户和组:
查看是否存在MySQL组:&&
[root@tsxs&home]#&grep&mysql&/etc/group&&
不存在创建MySQL组:&&
[root@tsxs&home]#&groupadd&mysql&&
查看是否存在MySQL用户:&&
[root@tsxs&home]#&grep&mysql&/etc/passwd&&
不存在创建MySQL用户:&&
[root@tsxs&~]#&useradd&mysql&-g&mysql&-M&-s&/sbin/nologin&&&
[root@tsxs&sbin]#&grep&mysql&/etc/passwd&&
mysql:x:500:500::/home/mysql:/sbin/nologin&&
使用groups查看用户mysql所在的组&&
[root@tsxs&sbin]#&groups&mysql&&
mysql&:&mysql&&
注:-g:指定新用户所属的用户组(group);&-M:不建立根目录;-s:定义其使用的shell,/sbin/nologin代表用户不能登录系统。
注:也可以:
[root@Master&home]#&useradd&mysql&-g&mysql&-d&/usr/local/mysql&-s&/bin/sh&&
如果有,请修改:
[root@tsxs&bin]#&usermod&-s&/bin/sh&-d&/usr/local/mysql&-g&mysql&mysql&&
&-d:用户的登录主目录/usr/local/mysql,-s用户的登录Shell是/bin/sh
可查看:[root@tsxs bin]# vim /etc/passwd
mysql:x:500:500::/usr/local/mysql:/bin/sh
[root@tsxs&installfiles]#&tar&zxvf&mysql-5.6.27.tar.gz&&&&
[root@tsxs&installfiles]#&cd&mysql-5.6.27&&
[root@tsxs&mysql-5.6.27]#&ls&&
BUILD&&cmake&&config.h.cmake&&dbug&extra&&&&&&&&&&&&&
INSTALL-WIN-SOURCE&&libmysqld&mysql-test&&packaging&&regex&&
sql-bench&strings&&unittest&win&BUILD-CMAKE&&&&
CMakeLists.txt&&configure.cmake&&Docs&include&libevent&&
libservices&&mysys&&plugin&scripts&&sql-common&&support-files&&&
VERSION&zlib&client&cmd-line-utils&COPYING&Doxyfile-perfschema&&
INSTALL-SOURCE&libmysql&man&mysys_ssl&README&sql&storage&tests&vio&&
准备安装目录:
安装MySQL目录:/usr/local/mysql&
[root@tsxs&local]#&mkdir&-p&/usr/local/mysql&&
MySQL数据库目录:/data
[root@tsxs&/]#&mkdir&/data&&&&
注:-p参数:如果一个目录的父目录不存在,就创建它
编译源代码:
[root@tsxs mysql-5.6.27]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql
cmake&-DCMAKE_INSTALL_PREFIX=/usr/local/mysql&-DMYSQL_DATADIR=/data&-DDEFAULT_CHARSET=utf8&-DDEFAULT_COLLATION=utf8_bin&-DEXTRA_CHARSETS=all&-DENABLED_LOCAL_INFILE=1&&
注:MySQL安装目录
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql&&&&&
MySQL数据库存放目录&&&&&&&
-DINSTALL_DATADIR=/data&&&&
使用utf8字符&&&&&&&&&
-DDEFAULT_CHARSET=utf8&&&&&&&&
校验字符&&&&&&&&&&&&&&    &&
-DDEFAULT_COLLATION=utf8_bin&&&&&&&
安装所有扩展字符集&&&&&&&&&
-DEXTRA_CHARSETS=all&&&&&&&&
允许从本地导入数据&&&&&&&&&&&&&&&&&&    &&
-DENABLED_LOCAL_INFILE=1&&&&
注:-D 标志这种特性为大多数编译器所支持,是传递给编译器的主要参数,绝对路径
编译源代码:
[root@tsxs&mysql-5.6.27]#&make&&
[root@tsxs&mysql-5.6.27]#&make&install&&
也可一次:make && make install
[root@Master&/]#&cmake&-DCMAKE_INSTALL_PREFIX=/usr/local/mysql&-DMYSQL_DATADIR=/data&-DDEFAULT_CHARSET=utf8&-DDEFAULT_COLLATION=utf8_bin&-DEXTRA_CHARSETS=all&-DENABLED_LOCAL_INFILE=1&&
[root@Master&/]#&make&&&&make&install&&
[root@Master&mysql]#&./scripts/mysql_install_db&--basedir=/usr/local/mysql&--datadir=/data&--user=mysql&&
注:初始化日志,为下,则初始化成功:附件日志1!
安装完毕,查看安装目录 eg:/usr/local/mysql&:
[root@tsxs&mysql]#&ls&&
bin&&COPYING&&data&&docs&&include&&INSTALL-BINARY&&lib&&man&&mysql-test&&README&&scripts&&share&&sql-bench&&support-files&&
初始化MySQL数据库(在安装目录下):
[root@tsxs&mysql]#&./scripts/mysql_install_db&--basedir=/usr/local/mysql&--datadir=/data&--user=mysql&&
设置,配置文件,copy(在安装目录下):
[root@tsxs&support-files]#&cp&-R&my-default.cnf&/etc/my.cnf&&
设置启动服务(在安装目录下):
[root@Master&support-files]#&cp&-R&mysql.server&/etc/rc.d/init.d/mysqld&&
更改权限(涉及到MySQL数据库的文件和目录都属于mysql用户):
注:不仅减少了root用户的登录和管理时间,同样也提高了安全性。注:chown在授权目录下,执行:
[root@tsxs&/]#&chown&-R&mysql.mysql&/data&&
[root@Master&mysql]#&pwd&&
/usr/local/mysql&&
[root@Master&mysql]#&chown&-R&mysql.mysql&/usr/local/mysql/&&
[root@tsxs&etc]#&chown&-R&mysql.mysql&/etc/my.cnf&&
[root@tsxs&init.d]#&chown&-R&mysql.mysql&mysqld&&&
启动MySQL服务:
[root@tsxs&bin]#&./mysqld_safe&--user=mysql&&&&
[root@tsxs&bin]#&service&mysqld&start&&
Starting&MySQL&SUCCESS!&&&
[root@tsxs&bin]#&service&mysqld&restart&&
Shutting&down&MySQL.&SUCCESS!&&&
Starting&MySQL.&SUCCESS!&&&
[root@tsxs&bin]#&service&mysqld&stop&&
Shutting&down&MySQL.&SUCCESS!&&&
如果使用MySQL的一些命令需要配置,将这些命令加入到系统环境变量,让他生效::
MySQL的命令目录:
[root@tsxs&~]#&cd&/usr/local/mysql/bin/&&
[root@tsxs&init.d]#&vim&/etc/profile&&
export&MYSQL_HOME=/usr/local/mysql&&
export&PATH=$MYSQL_HOME/bin:$PATH&&
[root@tsxs&init.d]#&source&/etc/profile&&
启动MySQL客户端client,并修改配置文件:
在下边MySQL配置文件加入客户端,登陆信息:
[root@tsxs&bin]#&vim&/etc/my.cnf&&
#&The&following&options&will&be&passed&to&all&MySQL&clients&&
[client]&&
#password&&&&&&&=&your_password&&
port&&&&&&&&&&&&=&3306&&
socket&&&&&&&&&&=&/data/mysql.sock&&
#&The&MySQL&server&&
[mysqld]&&
basedir&=&/usr/local/mysql&&
datadir&=&/data&&
port&=&3306&&
socket&=&/data/mysql.sock&&
log-error&=&/data/mysql-error.log&&
pid-file&=&/data/mysql.pid&&
user&=&mysql&&
启动MySQL客户端,第一次未设置密码:
[root@tsxs&tmp]#&mysql&&
Welcome&to&the&MySQL&monitor.&&Commands&end&with&;&or&\g.&&
Your&MySQL&connection&id&is&1&&
Server&version:&5.6.27&Source&distribution&&
Copyright&(c)&,&Oracle&and/or&its&affiliates.&All&rights&reserved.&&
Oracle&is&a&registered&trademark&of&Oracle&Corporation&and/or&its&&
affiliates.&Other&names&may&be&trademarks&of&their&respective&&
Type&''&or&'\h'&for&help.&Type&'\c'&to&clear&the&current&input&statement.&&
mysql&&quit&&
设置mysql为开机启动:
[root@Master&init.d]#&chkconfig&--add&mysqld&&&
[root@Master&init.d]#&chkconfig&mysqld&on&&
[root@Master&init.d]#&chkconfig&--list&|&grep&mysql&&
mysqld&&&&&&&&&&0:off&&&1:off&&&2:on&&&&3:on&&&&4:on&&&&5:on&&&&6:off&&
#&rm&-f&CMakeCache.txt&&
以及安装软件涉及到其他文件,eg:
# rm -rf /etc/my.cnf
[root@tsxs&installfiles]#&cd&ncurses-6.0&&
[root@tsxs&ncurses-6.0]#&ls&&
aclocal.m4&&announce.html.in&&config.guess&&configure.in&&&&&&&&&&dist.mk&&include&&&&&&&
Makefile.in&&&MANIFEST&&mk-0th.awk&&mk-hdr.awk&&package&&README&&&&&&&&test&&
Ada95&&&&&&&AUTHORS&&&&&&&&&&&config.sub&&&&convert_configure.pl&&doc&&&&&&INSTALL&&&&&&&
Makefile.os2&&menu&&&&&&mk-1st.awk&&ncurses&&&&&panel&&&&README.emx&&&&TO-DO&&
ANNOUNCE&&&&c++&&&&&&&&&&&&&&&configure&&&&&COPYING&&&&&&&&&&&&&&&form&&&&&install-sh&&&&
man&&&&&&&&&&&misc&&&&&&mk-2nd.awk&&NEWS&&&&&&&&progs&&&&README.MinGW&&VERSION&&
按照你的系统环境制作安装配置文件:
[root@tsxs&ncurses-6.0]#&./configure&&&
编译源代码并且编译NCURSES库:
[root@tsxs&ncurses-6.0]#&make&&
安装编译好的NCURSES库:
[root@tsxs&ncurses-6.0]#&make&install&&
[root@tsxs&bin]#&man&ncurses&&
或在目录:
/usr/lib下查找是否有libncurses.so或libncurses.a这个库
问题回答:
-- Could NOT find Curses (missing: &CURSES_LIBRARY CURSES_INCLUDE_PATH)&
CMake Error at cmake/readline.cmake:85 (MESSAGE):
& Curses library not found. &Please install appropriate package,
安装:ncurses,即可!
[root@tsxs init.d]# service mysqld start
Starting MySQL. ERROR! The server quit without updating PID file (/data/mysql.pid).
[root@tsxs init.d]# service mysqld status
&ERROR! MySQL is not running, but lock file (/var/lock/subsys/mysql) exists
#&The&following&options&will&be&passed&to&all&MySQL&clients&&
[client]&&
#password&&&&&&&=&your_password&&
port&&&&&&&&&&&&=&3306&&
socket&&&&&&&&&&=&/data/mysql.sock&&
#&The&MySQL&server&&
[mysqld]&&
basedir&=&/usr/local/mysql&&
datadir&=&/data&&
port&=&3306&&
socket&=&/data/mysql.sock&&
log-error&=&/data/mysql-error.log&&
pid-file&=&/data/mysql.pid&&
user&=&mysql&&
[root@tsxs&local]#&chown&-R&mysql.mysql&/usr/local/mysql/&&
[root@tsxs&/]#&chown&-R&mysql.mysql&/data&&
[root@tsxs&etc]#&chown&-R&mysql.mysql&/etc/my.cnf&&
[root@tsxs&init.d]#&chown&-R&mysql.mysql&mysqld&&&
注:若不能解决请关注:
1:查看:vim /etc/passwd ---& &mysql:x:500:500::/usr/local/mysql:/bin/sh &---& & 下mysql用户的权限和路径
2:是否安装,ncurses-devel和perl-Module-Install.noarch
3:此原因是因为,/data/mysql.pid文件的创建者为root,所以:关注1很重要!文章尾备注日志2!
4:查看,安装路径/etc/local/mysql和/data和/etc/my.cnf和启动脚本的拥有者和权限(chown/chomd)
5:花了好多时间解决问题3,甚至查启动日志,好久,最后发现,重启一下,reboot就好了!
备注图片1,2:最后!
[root@tsxs init.d]# mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
问题2的MySQL配置文件client的那个配置加入即可,指定mysql.sock位置!
[root@Master cmake-3.3.2]# ./bootstrap&
---------------------------------------------
CMake 3.3.2, Copyright
Kitware, Inc.
C compiler on this system is: cc&
---------------------------------------------
Error when bootstrapping CMake:
Cannot find appropriate C++ compiler on this system.
Please specify one using environment variable CXX.
See cmake_bootstrap.log for compilers attempted.
---------------------------------------------
Log of errors: /home/installfiles/resourceinstall-mysql/cmake-3.3.2/Bootstrap.cmk/cmake_bootstrap.log
---------------------------------------------
[root@Master&cmake-3.3.2]#&yum&-y&install&gcc-c++&&
[root@Master mysql]# ./scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/data --user=mysql
FATAL ERROR: please install the following Perl modules before executing ./scripts/mysql_install_db:
Data::Dumper
解决5(centos最小安装):
[root@Master&scripts]#&yum&install&-y&perl-Module-Install.noarch&&
[root@Master init.d]# service mysqld start
00:57:58 0 [Warning] TIMESTAMP with implicit DEFAULT value is
deprecated. Please use --explicit_defaults_for_timestamp server option
(see documentation for more details).
00:57:58 0 [Note] /etc/init.d/mysqld (mysqld 5.6.27) starting as process 14599 ...
或mysql启动报错:Segmentation fault
[root@Master&data]#&yum&install&-y&ncurses-devel&&
注:然后删除:/data和/usr/local/mysql/两个目录,重新解压编译安装!别嫌麻烦!
[root@Master&~]#&vim&/etc/my.cnf&&
加入(此法并未解决):
[mysqld]&&
explicit_defaults_for_timestamp=true&&
这是数据库升级过程中,timestamp在5.6以前的数据库中默认not&null,如果没有显示声明timestamp的默认值,那么该列用全0的"&00:00:00"作为默认值&&
在5.6中后,时间值是不能为全0格式,添加explicit_defaults_for_timestamp&参数&&
添加之后,timestamp列可以设置默认为空,并且不填充0,如果填充了0,如果SQL_MODE为strict&sql则会报错除非显示指定default&current_time和on&update&current_time&&
加入explicit_defaults_for_timestamp=true后,创建表timestamp类型Default值已经默认null了&&
CMAKE_INSTALL_PREFIX
值是安装的基本目录,其他cmake选项值是不包括前缀,是相对路径名,绝对路径包括&CMAKE_INSTALL_PREFIX:MySQL的安装目
录。如-DINSTALL_SBINDIR=sbin的绝对路径是&/sbin&&
注:-D&标志这种特性为大多数编译器所支持,是传递给编译器的主要参数,绝对路径&&
2:MySQL存储引擎选项&&
mysql存储引擎是插件式的,因此插件控制选项可以指定那个存储引擎安装。&&
configure编译插件选项--with-plugins=csv,myisam,myisammrg,heap,innobase,&&
archive,blackhole在cmake中没有直接对应的相同选项。对于csv,myisam,myisammrg,heap在cmake中是不需要明确指定存储引擎的名称,因为它们是强制性安装。&&
3:可以使用以下选择来安装innodb,archive,blackhole存储引擎&&
-DWITH_INNOBASE_STORAGE_ENGINE=1&&
-DWITH_ARCHIVE_STORAGE_ENGINE=1&&
-DWITH_BLACKHOLE_STORAGE_ENGINE=1&&
注:1也可以使用on代替&&
果既不是-DWITH_&ENGINE&_STORAGE_ENGINE&也不
是&-DWITHOUT_&ENGINE&_STORAGE_ENGINE&来指定存储引擎,该存储引擎将安装成共享模块式的。如果不是共享
模块式的将排除在外。共享模块安装时必须使用INSTALL&PLUGIN语句或--plugin-load才可以使用。&&
4:其他选项&&
之前MySQL的编译选项大多数都支持。新旧版本之间的安装选项映射成大写字母,删除选项前面破折号,中间字符间的破折号替换成下划线。如:&&
--with-debug&=&&WITH_DEBUG=1&&
--with-embedded-server&=&&WITH_EMBEDDED_SERVER&&
5:调试配置过程&&
使用configure编译完将生成config.log和config.status文件。&&
使用cmake编译完在CMakeFiles目录下生成CMakeError.log&和CMakeOutput.log文件。&&
编译参数参考:
BUILD_CONFIG&&&采用官方发行版一致的编译参数&&
CMAKE_BUILD_TYPE&指定产品编译说明信息&&&RelWithDebInf&&
CMAKE_INSTALL_PREFIX&指定MySQL安装路径&&/usr/local/mysql&&
CPACK_MONOLITHIC_INSTALL是否建立单个安装包文件&OFF&&&5.6.7&&
DEFAULT_CHARSET&&MYSQL&默认字符集&&latin1&&&5.6.7&&
DEFAULT_COLLATION&MYSQL&默认排序字符集&&latin1_swedish_ci&5.6.7&&
ENABLE_DEBUG_SYNC&是否启用同步调试功能&&ON&&&5.6.7&&
ENABLE_DOWNLOADS&是否下载可选文件&&OFF&&&5.6.7&&
ENABLE_DTRACE&&是否包含&DTrace&支持&&&&&5.6.7&&
ENABLE_GCOV&&是否包含&Gcov&支持&&&&&5.5.14&&
ENABLED_LOCAL_INFILE&是否启用本地&LOAD&DATA&INFILE&OFF&&&5.6.7&&
ENABLED_PROFILING&是否启用代码查询分析&&ON&&&5.6.7&&
INSTALL_BINDIR&&MySQL&主执行文件目录&&PREFIX/bin&&5.6.7&&
INSTALL_DOCDIR&&文档安装路径&&&PREFIX/docs&&5.6.7&&
INSTALL_DOCREADMEDIR&自述文件目录&&&PREFIX&&&5.6.7&&
INSTALL_INCLUDEDIR&头文件目录&&&PREFIX/include&&5.6.7&&
INSTALL_INFODIR&&关于信息文件目录&&PREFIX/docs&&5.6.7&&
INSTALL_LAYOUT&&选择预定义的安装&&STANDALONE&&5.6.7&&
INSTALL_LIBDIR&&库文件目录&&&PREFIX/lib&&5.6.7&&
INSTALL_MANDIR&&手册页面目录&&&PREFIX/man&&5.6.7&&
INSTALL_MYSQLSHAREDIR&共享数据目录&&&PREFIX/share&&5.6.7&&
INSTALL_MYSQLTESTDIR&mysql-test&目录&&&PREFIX/mysql-test&5.6.7&&
INSTALL_PLUGINDIR&插件目录&&&PREFIX/lib/plugin&5.6.7&&
INSTALL_SBINDIR&&服务器超级用户执行文件目录&PREFIX/bin&&5.6.7&&
INSTALL_SCRIPTDIR&脚本目录&&&PREFIX/scripts&&5.6.7&&
INSTALL_SHAREDIR&aclocal/mysql.m4&安装目录&PREFIX/share&&5.6.7&&
INSTALL_SQLBENCHDIR&sql-bench&性能测试工具目录&PREFIX&&&5.6.7&&
INSTALL_SUPPORTFILESDIR&扩展支持文件目录&&PREFIX/support-files&5.6.7&&
MYSQL_DATADIR&&数据库存放目录&&&&&&5.6.7&&
MYSQL_MAINTAINER_MODE&是否启用MySQL的维护环境&&OFF&&&5.6.7&&
MYSQL_TCP_PORT&&TCP/IP&端口号&&&3306&&&5.6.7&&
MYSQL_UNIX_ADDR&&Unix&Socket&套接字文件&&/tmp/mysql.sock&&5.6.7&&
SYSCONFDIR&&选项配置文件目录&&&&&5.6.7&&
WITH_COMMENT&&编译环境发表评论&&&&&5.6.7&&
WITH_DEBUG&&是否包括调试支持&&OFF&&&5.6.7&&
WITH_EMBEDDED_SERVER&是否要建立嵌入式服务器&&OFF&&&5.6.7&&
WITH_xxx_STORAGE_ENGINE&静态编译xxx&存储引擎到服务器&&&&5.6.7&&
WITH_EXTRA_CHARSETS&额外的字符集,包括&&all&&&5.6.7&&
WITH_LIBWRAP&&是否包括支持libwrap(TCP包装)&OFF&&&5.6.7&&
WITH_READLINE&&使用捆绑的readline&&OFF&&&5.6.7&&
WITH_SSL&&是否支持SSL&&no&&&5.6.7&&
WITH_ZLIB&&是否支持Zlib&&system&&&5.6.7&&
WITHOUT_XXX_STORAGE_ENGINE&不编译XXX存储引擎到数据库&&
&18:18:41&0&[Note]&/usr/local/mysql/bin/mysqld&(mysqld&5.6.27)&starting&as&process&19263&...&&
&18:18:41&19263&[Note]&InnoDB:&Using&atomics&to&ref&count&buffer&pool&pages&&
The&latest&information&about&MySQL&is&available&on&the&web&at&&
&&http://www.mysql.com&&
Support&MySQL&by&buying&support/licenses&at&http://shop.mysql.com&&
New&default&config&file&was&created&as&/usr/local/mysql/my.cnf&and&&
will&be&used&by&default&by&the&server&when&you&start&it.&&
You&may&edit&this&file&to&change&server&settings&&
root&&&&&14043&&&&&1&&0&19:30&pts/1&&&&00:00:00&/bin/sh&/usr/local/mysql/bin/mysqld_safe&--datadir=/data&--pid-file=/data/tsxs.pid&&
mysql&&&&&&0&19:30&pts/1&&&&00:00:00&/usr/local/mysql/bin/mysqld&--basedir=/usr/local/mysql&--datadir=/data&--plugin-dir=/usr/local/mysql/lib/plugin&--user=mysql&--log-error=/data/tsxs.err&--pid-file=/data/tsxs.pid&&
root&&&&&14191&&&958&&0&19:35&pts/0&&&&00:00:00&grep&mysql&&
备注图片1,2:
阅读(...) 评论()linux安装mysql时,./mysql_install_db初始化数据库后没有增加var文件夹_百度知道
linux安装mysql时,./mysql_install_db初始化数据库后没有增加var文件夹
我按照教程中一步一步操作,到初始化这里却没能一样,我的不能增加var文件夹?求解?我的是Bt5 R3
我有更好的答案
用这条命令吧:./mysql_install_db --datadir=../var --user=mysql
采纳率:38%
为您推荐:
其他类似问题
初始化的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。11:24 提问
ubuntu 16.04安装mysql,初始化数据库报错。
系统:阿里云 Ubuntu16.4 ,64位
mysql:5.7.17
问题描述:
使用官网64位tar.gz压缩包进行mysql安装。压缩包解压后,进行数据库初始化。
(5.7.17版本没有data目录,需要自己创建;mysql_install_db 文件在bin目录下,
scripts目录取消)
执行命令: bin/mysql_install_db
--user=mysql
--basedir=/usr/local/mysql
--datadir=/usr/local/mysql/data
报错:如图
这个问题困扰了我2天了。。。。网上好的的教程,都试过了,尴尬。。。请教大神指点
//===========================================
现在我按照mysql官网文档进行安装,又出现问题了。
按赞数排序
please refer below.
shell& groupadd mysql
shell& useradd -r -g mysql -s /bin/false mysql
shell& cd /usr/local
shell& tar zxvf /path/to/mysql-VERSION-OS.tar.gz
shell& ln -s full-path-to-mysql-VERSION-OS mysql
shell& cd mysql
shell& mkdir mysql-files
shell& chmod 750 mysql-files
shell& chown -R mysql .
shell& chgrp -R mysql .
shell& bin/mysqld --initialize --user=mysql # MySQL 5.7.6 and up
shell& bin/mysql_ssl_rsa_setup
# MySQL 5.7.6 and up
shell& chown -R root .
shell& chown -R mysql data mysql-files
shell& bin/mysqld_safe --user=mysql &
# Next command is optional
shell& cp support-files/mysql.server /etc/init.d/mysql.server
你好,我一回复你的私信csdn就让重新登入。所以在这里回复下。
直接安装问题少。请参考以下URL:
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐查看: 4662|回复: 10
Linux 安装 Mysql
论坛徽章:18
Linux 安装 Mysql
日期: 作者:Linux时代 来自:linux.chinaunix.net
--------------------------------------------------------------------------------
  一、引言
  想使用Linux已经很长时间了,由于没有硬性任务一直也没有系统学习,近日由于工作需要必须使用Linux下的MySQL。本以为有Windows下使用SQL Server的经验,觉得在Linux下安装MySql应该是易如反掌的事,可在真正安装和使用MySQL时走了很多弯路,遇见很多问题,毕竟Linux 和Windows本身就有很大区别。为了让和我一样的初学者在学习的过程中少走弯路,尽快入门,写了此文,希望对您有所帮助。本文的Linux环境是 Red Hat 9.0,MySQL是4.0.16。
   二、安装Mysql
   1、下载MySQL的安装文件
   安装MySQL需要下面两个文件:
   MySQL-server-4.0.16-0.i386.rpm   
   MySQL-client-4.0.16-0.i386.rpm
   下载地址为:,打开此网页,下拉网页找到“Linux x86 RPM downloads”项,找到“Server”和“Client programs”项,下载需要的上述两个rpm文件。
   2、安装MySQL
   rpm文件是Red Hat公司开发的软件安装包,rpm可让Linux在安装软件包时免除许多复杂的手续。该命令在安装时常用的参数是 –ivh ,其中i表示将安装指定的rmp软件包,V表示安装时的详细信息,h表示在安装期间出现“#”符号来显示目前的安装过程。这个符号将持续到安装完成后才停止。
   1)安装服务器端
   在有两个rmp文件的目录下运行如下命令:
   [root@test1 local]# rpm -ivh MySQL-server-4.0.16-0.i386.rpm
   显示如下信息。
  warning: MySQL-server-4.0.16-0.i386.rpm: V3 DSA signature: NOKEY, key ID
   Preparing...       ########################################### [100%]
   1:MySQL-server     ########################################### [100%]
  。。。。。。(省略显示)
   /usr/bin/mysqladmin -u root password \'new-password\'
   /usr/bin/mysqladmin -u root -h test1 password \'new-password\'
  。。。。。。(省略显示)
   Starting mysqld daemon with databases from /var/lib/mysql
   如出现如上信息,服务端安装完毕。测试是否成功可运行netstat看Mysql端口是否打开,如打开表示服务已经启动,安装成功。Mysql默认的端口是3306。
   [root@test1 local]# netstat -nat
   Active Internet connections (servers and established)
   Proto Recv-Q Send-Q Local Address    Foreign Address   State   
   tcp  0  0 0.0.0.0:3306   0.0.0.0:*    LISTEN   
   上面显示可以看出MySQL服务已经启动。
   2)安装客户端
   运行如下命令:
   [root@test1 local]# rpm -ivh MySQL-client-4.0.16-0.i386.rpm
   warning: MySQL-client-4.0.16-0.i386.rpm: V3 DSA signature: NOKEY, key ID
   Preparing...    ########################################### [100%]
   1:MySQL-client########################################### [100%]
   显示安装完毕。
   用下面的命令连接mysql,测试是否成功。
  三、登录MySQL
   登录MySQL的命令是mysql, mysql 的使用语法如下:
   mysql [-u username] [-h host] [-p[password]] [dbname]
   username 与 password 分别是 MySQL 的用户名与密码,mysql的初始管理帐号是root,没有密码,注意:这个root用户不是Linux的系统用户。MySQL默认用户是root,由于初始没有密码,第一次进时只需键入mysql即可。
   [root@test1 local]# mysql
   Welcome to the MySQL monitor. C or \\g.
   Your MySQL connection id is 1 to server version: 4.0.16-standard
   Type \'\' or \'\\h\' for help. Type \'\\c\' to clear the buffer.
   mysql&
   出现了“mysql&”提示符,恭喜你,安装成功!
   增加了密码后的登录格式如下:
   mysql -u root -p
   Enter password: (输入密码)
   其中-u后跟的是用户名,-p要求输入密码,回车后在输入密码处输入密码。
   注意:这个mysql文件在/usr/bin目录下,与后面讲的启动文件/etc/init.d/mysql不是一个文件。
   四、MySQL的几个重要目录
   MySQL安装完成后不象SQL Server默认安装在一个目录,它的数据库文件、配置文件和命令文件分别在不同的目录,了解这些目录非常重要,尤其对于Linux的初学者,因为 Linux本身的目录结构就比较复杂,如果搞不清楚MySQL的安装目录那就无从谈起深入学习。
   下面就介绍一下这几个目录。
   1、数据库目录
   /var/lib/mysql/
   2、配置文件
   /usr/share/mysql(mysql.server命令及配置文件)
   3、相关命令
   /usr/bin(mysqladmin mysqldump等命令)
   4、启动脚本
   /etc/rc.d/init.d/(启动脚本文件mysql的目录)
  五、修改登录密码
   MySQL默认没有密码,安装完毕增加密码的重要性是不言而喻的。
   1、命令
   usr/bin/mysqladmin -u root password \'new-password\'
   格式:mysqladmin -u用户名 -p旧密码 password 新密码
   2、例子
   例1:给root加个密码123456。
   键入以下命令 :
   [root@test1 local]# /usr/bin/mysqladmin -u root password 123456
   注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。
   3、测试是否修改成功
   1)不用密码登录
   [root@test1 local]# mysql
   ERROR 1045: Access denied for user: \'root@localhost\' (Using password: NO)
   显示错误,说明密码已经修改。
   2)用修改后的密码登录
   [root@test1 local]# mysql -u root -p
   Enter password: (输入修改后的密码123456)
   Welcome to the MySQL monitor. C or \\g.
   Your MySQL connection id is 4 to server version: 4.0.16-standard
   Type \'\' or \'\\h\' for help. Type \'\\c\' to clear the buffer.
   mysql&
   成功!
   这是通过mysqladmin命令修改口令,也可通过修改库来更改口令。
   六、启动与停止
   1、启动
   MySQL安装完成后启动文件mysql在/etc/init.d目录下,在需要启动时运行下面命令即可。
   [root@test1 init.d]# /etc/init.d/mysql start
   2、停止
   /usr/bin/mysqladmin -u root -p shutdown
   3、自动启动
   1)察看mysql是否在自动启动列表中
   [root@test1 local]# /sbin/chkconfig –list
   2)把MySQL添加到你系统的启动服务组里面去
   [root@test1 local]# /sbin/chkconfig – add mysql
   3)把MySQL从启动服务组里面删除。
   [root@test1 local]# /sbin/chkconfig – del mysql
  七、更改MySQL目录
   MySQL默认的数据文件存储目录为/var/lib/mysql。假如要把目录移到/home/data下需要进行下面几步:
   1、home目录下建立data目录
   cd /home
   mkdir data
   2、把MySQL服务进程停掉:
   mysqladmin -u root -p shutdown
   3、把/var/lib/mysql整个目录移到/home/data
   mv /var/lib/mysql /home/data/
   这样就把MySQL的数据文件移动到了/home/data/mysql下
   4、找到my.cnf配置文件
   如果/etc/目录下没有my.cnf配置文件,请到/usr/share/mysql/下找到*.cnf文件,拷贝其中一个到/etc/并改名为my.cnf)中。命令如下:
   [root@test1 mysql]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
   5、编辑MySQL的配置文件/etc/my.cnf
   为保证MySQL能够正常工作,需要指明mysql.sock文件的产生位置。 修改socket=/var/lib/mysql/mysql.sock一行中等号右边的值为:/home/mysql/mysql.sock 。操作如下:
   vimy.cnf  (用vi工具编辑my.cnf文件,找到下列数据修改之)
   # The MySQL server
  [mysqld]
  port   = 3306
  #socket= /var/lib/mysql/mysql.sock(原内容,为了更稳妥用“#”注释此行)
  socket= /home/data/mysql/mysql.sock   (加上此行)
   6、修改MySQL启动脚本/etc/rc.d/init.d/mysql
   最后,需要修改MySQL启动脚本/etc/rc.d/init.d/mysql,把其中datadir=/var/lib/mysql一行中,等号右边的路径改成你现在的实际存放路径:home/data/mysql。
   [root@test1 etc]# vi /etc/rc.d/init.d/mysql
   #datadir=/var/lib/mysql    (注释此行)
   datadir=/home/data/mysql (加上此行)
   7、重新启动MySQL服务
   /etc/rc.d/init.d/mysql start
   或用reboot命令重启Linux
   如果工作正常移动就成功了,否则对照前面的7步再检查一下。
   八、MySQL的常用操作
   注意:MySQL中每个命令后都要以分号;结尾。
   1、显示数据库
   mysql&
   +----------+
   | Database |
   +----------+
   | mysql  |
   | test |
   +----------+
   2 rows in set (0.04 sec)
   Mysql刚安装完有两个数据库:mysql和test。mysql库非常重要,它里面有MySQL的系统信息,我们改密码和新增用户,实际上就是用这个库中的相关表进行操作。
   2、显示数据库中的表
   mysql& (打开库,对每个库进行操作就要打开此库,类似于foxpro )
   Database changed
   mysql&
   +-----------------+
   | Tables_in_mysql |
   +-----------------+
   | columns_priv  |
   | db       |
   | func      |
   | host      |
   | tables_priv |
   | user      |
   +-----------------+
   6 rows in set (0.01 sec)
   3、显示数据表的结构:
   describe 表名;
   4、显示表中的记录:
   select * from 表名;
   例如:显示mysql库中user表中的纪录。所有能对MySQL用户操作的用户都在此表中。
   Select *
   5、建库:
   create database 库名;
   例如:创建一个名字位aaa的库
   mysql&
  6、建表:
   use 库名;
   create table 表名 (字段设定列表);
   例如:在刚创建的aaa库中建立表name,表中有id(序号,自动增长),xm(姓名),xb(性别),csny(出身年月)四个字段
   mysql& create table name (id int(3) auto_increment not null primary key, xm char(8),xb char(2),csny date);
   可以用describe命令察看刚建立的表结构。
   mysql&
   +-------+---------+------+-----+---------+----------------+
   | Field | Type  | Null | Key | Default | Extra     |
   +-------+---------+------+-----+---------+----------------+
   | id  | int(3) |   | PRI | NULL  | auto_increment |
   | xm  | char(8) | YES | | NULL  |        |
   | xb  | char(2) | YES | | NULL  |        |
   | csny | date  | YES | | NULL  |        |
   +-------+---------+------+-----+---------+----------------+
   7、增加记录
   例如:增加几条相关纪录。
   mysql& insert into name values(\'\',\'张三\',\'男\',\'\');
   mysql& insert into name values(\'\',\'白云\',\'女\',\'\');
   可用select命令来验证结果。
   mysql& select *
   +----+------+------+------------+
   | id | xm| xb| csny  |
   +----+------+------+------------+
   | 1 | 张三 | 男|
   | 2 | 白云 | 女|
   +----+------+------+------------+
   8、修改纪录
   例如:将张三的出生年月改为
   mysql& update name set csny=\'\' where xm=\'张三\';
   9、删除纪录
   例如:删除张三的纪录。
   mysql& delete from name where xm=\'张三\';
   10、删库和删表
   drop database 库名;
   drop table 表名;
   九、增加MySQL用户
   格式:grant select on 数据库.* to 用户名@登录主机 identified by &密码&
  例1、增加一个用户user_1密码为123,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MySQL,然后键入以下命令:
   mysql& grant select,insert,update,delete on *.* to user_1@&%& Identified by &123&;
  例1增加的用户是十分危险的,如果知道了user_1的密码,那么他就可以在网上的任何一台电脑上登录你的MySQL数据库并对你的数据为所欲为了,解决办法见例2。
  例2、增加一个用户user_2密码为123,让此用户只可以在localhost上登录,并可以对数据库aaa进行查询、插入、修改、删除的操作(localhost指本地主机,即MySQL数据库所在的那台主机),这样用户即使用知道user_2的密码,他也无法从网上直接访问数据库,只能通过 MYSQL主机来操作aaa库。
   mysql&grant select,insert,update,delete on aaa.* to user_2@localhost identified by &123&;
   用新增的用户如果登录不了MySQL,在登录时用如下命令:
   mysql -u user_1 -p -h 192.168.113.50 (-h后跟的是要登录主机的ip地址)
   十、备份与恢复
   1、备份
   例如:将上例创建的aaa库备份到文件back_aaa中
   [root@test1 root]# cd /home/data/mysql (进入到库目录,本例库已由val/lib/mysql转到/home/data/mysql,见上述第七部分内容)
   [root@test1 mysql]# mysqldump -u root -p --opt aaa & back_aaa
   2、恢复
   [root@test mysql]# mysql -u root -p ccc & back_aaa
论坛徽章:18
GRANT&&ALL&&PRIVILEGES&&ON&&[dbname].*&&to&&'[user]'@'[hostname]'& &
  & & identified&&by&&'[password]';&&
grant all on dbnam.* to user@'''' identified by ''
RHEL5.x Linux 下的 mySQL收藏
& &我使用的是 RHEL5.1 版本,是 Redhat 企业版目前较高的版本(更高的我见过5.3)。RHEL5.x 以上版本,红帽子加强了版权控制,主要体现在软件包的GUI管理器不再随便使用,而是必须在红帽子注册后,才能使用这项功能。没有了软件包的GUI管理器,给软件管理造成了很大的不便,要么注册,要么就是手工管理 rpm 软件包。而手工管理 rpm 软件包可不是随便谁都可以管好的,就是熟练的系统管理员,也很发怵的。关于这个,本人有篇文章,利用本地光盘发行包来作为软件包管理的来源,较好地解决了问题:《RHEL5.0 的软件包管理》。
& & RHEL5.1 和红帽子的其他发行版类似,mySQL 安装后不是类似于 Windows 下的文件整体组织形式,而是被拆分得“四分五裂”,分散的分布于 Linux 的各个文件夹下,可能是向 Linux 的文件管理标准看齐吧。其文件分布如下:
& & /usr/bin& & mysql客户端程序和脚本
& & /usr/sbin& &mysqld服务器
& & /var/lib/mysql& &mysql日志文件,数据库
& & /usr/share/doc/packages& &mysql文档
& & /usr/include/mysql&&mysql包含(头)文件
& & /usr/lib/mysql& && &mysql库
& & /usr/share/mysql& & mysql错误消息和字符集文件
& & /usr/share/sql-bench& &mysql基准程序
& & //PhpMyAdmin 的安装和配置:
& & 首先注意:PhpMyAdmin2.x 系列版本针对的是小于PHP 5.2 以下版本,PhpMyAdmin3.x 系列版本针对的是大于等于 PHP 5.2 以上版本。
& & 1,PhpMyAdmin 在 mySQL 的 root 用户为空口令时,可以直接运行。但 root 用户必须被设置密码!
& & 修改 root 用户口令为“mypassword”:
& & mysqladmin -u root password mypassword
& & 然后必须配置 PhpMyAdmin 的配置文件:
& & 拷贝 config.inc.sample.php 为 config.inc.php ,修改帐户、密码、服务器地址等一些必要的配置。
& & 2,提示“配置文件现在需要绝密的短语密码(blowfish_secret)”的处理:
& & “blowfish_secret”用一个任意字符串作为cookie的加密字符串,如果没有加密钥匙,系统会显示”配置文件现在需要绝密的短语密码(blowfish_secret) ” ,配置如下:
& & 打开配置文件 config.inc.php,修改配置项:
& & $cfg['Servers'][$i]['auth_type'] = 'cookie';&&//默认既如此
& & $cfg['blowfish_secret'] = 'mysecret';(其中的&mysecret&自定义)
& & 修改以后,就可以输入用户和密码登录了。
& & 3,提示“无法载入 mcrypt 扩展,&br /&请检查 PHP 配置”的处理
& & 运行 php -m 命令(还可以用 phpinfo()函数来看),发现确实没有安装这个模块,安装 PHP 的 mcrypt.so 扩展模块即可。
& & 注意,在 RHEL5.x 下,PHP(版本5.1.6)配置扩展的方法,与 Windows 下去掉 php.ini 文件中“extension=xxxx.dll”的注释不同。
& & 注意 /etc/php.ini 中的 extension_dir = &/usr/lib/php/modules&,表明所有扩展模块是放置于这里的。再注意“Dynamic Extensions”部分的以下一段话:
& & ; Note: packaged extension modules are now loaded via the .ini files
& & ; found in the directory /etc/php.d; these are loaded by default.
& & 表明在 RHEL5 下管理扩展与 Windows 下很不同,要打开某个扩展,需要在 /etc/php.d 下建立一个 ini 文件。例如,在支持 mySQL 数据库时,会有个 mysql.ini 文件,内容如下:
& & ;Enable mysql extension module
& & extension=mysql.so
& & 所以,要支持 mcrypt 扩展,需要在 /usr/lib/php/modules 下有 mcrypt.so 文件,同时在 /etc/php.d 下有 mysql.ini 文件,内容为:
& & ;Enable mcrypt extension module
& & extension=mcrypt.so
& & 但是:RHEL5 的安装光盘里并没有这个文件!意味着,即使我们已经绕过注册能够自行管理软件包,也是不能直接安装 mcrypt 支持的!--Linux 就是这么糟糕!(此时我想大吼一声“开源万岁!狗屁不通!”)这个文件需要到网上去找(我又想大吼一声“网络万岁!”)。在网上找到 php-mcrypt-5.1.6-1.el5.i386.rpm 文件(来源我不清楚,应当是 Redhat 吧,而且需要对应 RHEL5 版本),运行一下包查看命令:
& & [root@localhost ~]# rpm -qpl php-mcrypt-5.1.6-1.el5.i386.rpm
& & warning: php-mcrypt-5.1.6-1.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 6f7eee0f
& & /etc/php.d/mcrypt.ini
& & /usr/lib/php/modules/mcrypt.so
& & 可以看到,安装后模块文件所处位置,对应的目录和我上边的分析一直。于是运行:
& & rpm -ivh php-mcrypt-5.1.6-1.el5.i386.rpm
& & 啊哈~~~出错了!错误提示:
& & libmcrypt.so.4 is needed by php-mcrypt-5.1.6-1.el5.i386
& & 看来 php-mcrypt-5.1.6-1.el5.i386.rpm 包是依赖 libmcrypt 包的。
& & 继续上网去搜,下载到 libmcrypt-2.5.7-2.fc3.i386.rpm 软件包,看一下里面包的是什么馅儿:
& & [root@localhost ~]# rpm -qpl libmcrypt-2.5.7-2.fc3.i386.rpm
& & warning: libmcrypt-2.5.7-2.fc3.i386.rpm: Header V3 DSA signature: NOKEY, key ID 1ac70ce6
& & /usr/lib/libmcrypt.so.4
& & /usr/lib/libmcrypt.so.4.4.7
& & /usr/share/aclocal/libmcrypt.m4
& & /usr/share/doc/libmcrypt-2.5.7
& & /usr/share/doc/libmcrypt-2.5.7/AUTHORS
& & /usr/share/doc/libmcrypt-2.5.7/COPYING.LIB
& & /usr/share/doc/libmcrypt-2.5.7/ChangeLog
& & /usr/share/doc/libmcrypt-2.5.7/KNOWN-BUGS
& & /usr/share/doc/libmcrypt-2.5.7/NEWS
& & /usr/share/doc/libmcrypt-2.5.7/README
& & /usr/share/doc/libmcrypt-2.5.7/THANKS
& & /usr/share/doc/libmcrypt-2.5.7/TODO
& & /usr/share/man/man3/mcrypt.3.gz
& & OK,libmcrypt.so.4 就在其中。“…fc3…”表明这个包就是 Redhat 出产的,可能会继续支持 RHEL5(向这类基础性的库,厂家一般会重复使用,经验啊!)。安装试一下:
& & [root@localhost ~]# rpm -ivh libmcrypt-2.5.7-2.fc3.i386.rpm
& & warning: libmcrypt-2.5.7-2.fc3.i386.rpm: Header V3 DSA signature: NOKEY, key ID 1ac70ce6
& & Preparing...& && && && && & ########################################### [100%]
& && & 1:libmcrypt& && && && &&&########################################### [100%]
& & 成功。再安装 mcrypt 包:
& & [root@localhost ~]# rpm -ivh php-mcrypt-5.1.6-1.el5.i386.rpm
& & warning: php-mcrypt-5.1.6-1.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 6f7eee0f
& & Preparing...& && && && && & ########################################### [100%]
& && & 1hp-mcrypt& && && && & ########################################### [100%]
& & 也成功了。重新启动 apache 服务:
& & [root@localhost ~]# httpd -k restart
& & 再打开 PhpMyAdmin 地址,好了。
& & 手工安装了以上的软件包以后,在软件包管理器里也可以看到它们,说明手工安装和图形界面的包管理,其实质是一样的。
& & 就为了不出现“无法载入 mcrypt 扩展……”这条提示,在 Linux 下我们做了多少事情!而 Windows 下则相对容易多了,复制 libmcrypt.dll 到 dlls 目录和 system32 目录下,再在 php.ini 中去掉注释,重新启动 Web 服务即可。Windows 下容易是主要原因是不用去网上找那些东西,可见 PHP 对 Windows 的支持要完善得多。或者说,Linux 对 PHP 的支持要打些折扣,不知道是不是商业上的考虑?
& & 1,WINDOWS操作系统下Mysql 5.1的文件分布:
& & bin& &客户端程序和mysqld服务器
& & data& &日志文件,数据库
& & Docs& &文档
& & examples& &示例程序和脚本
& & include& &包含(头)文件
& & lib& &库
& & scripts& &实用工具脚本
& & share& &错误消息文件
& & 2,Unix系统下文件分布:
& & bin& &客户端程序和mysqld服务器
& & data& &日志文件,数据库
& & docs& &文档,ChangeLog
& & include& &包含(头)文件
& & lib& &库
& & scripts& &mysql_install_db
& & share/mysql& &错误消息文件
& & sql-bench& &基准程序
& & 3,在 Linux 下,采用源码包(需要配置并编译源码)或二进制包安装mySQL后,一般情况下,可以将文件安装到/usr/local,即在下面的子目录中:
& & /usr/local/bin& && && && & 客户端程序和脚本
& & /usr/local/include/mysql& &包含(头)文件
& & /usr/local/info& && && && &Info格式的文档
& & /usr/local/lib/mysql& && & 库
& & /usr/local/libexec& && && &mysqld服务器
& & /usr/local/share/mysql& &&&错误消息文件
& & /usr/local/sql-bench& && & 基准程序和crash-me测试
& & /usr/local/var& && && && & 数据库和日志文件
论坛徽章:18
完美解读Linux中文件系统的目录结构
接触Linux也有一段时间了,不过这几天在编译开源程序时,才发现自己对 linux文件系统的目录结构了解的不够透彻,很多重要目录都说不清楚是用来干嘛的,于是在网上百度了一下这方面的介绍,根据自己的使用习惯,整理出来一篇关于Linux文件系统的目录结构的文章,和大家一起分享。
文章对Linux下所有目录一一说明,对比较重要的目录加以重点解说,以帮助初学者熟练掌握Linux的目录结构。同时文章最后附录了一份Linux目录结构的简明手册,以便大家查阅。
1、什么是文件系统
2、文件系统的类型
3、目录结构的详细解读
4、一些重要子目录的解读
5、附录:目录结构的简明查阅手册
我想,不光是我,对于每一个Linux学习者来说,了解Linux文件系统的目录结构,是学好Linux的至关重要的一步。下面大家跟飘扬一起来学习吧………….
1、什么是文件系统
当您使用Linux的时候,如果您通过ls –l / 就会发现,在/下包涵很多的目录,比如etc、usr、var、bin ... ... 等目录,而在这些目录中,我们进去看看,发现也有很多的目录或文件。文件系统在Linux下看上去就象树形结构,所以我们可以把文件系统的结构形象的称为树形结构。
linux文件系统的最顶端是/,我们称/为Linux的root,也就是 Linux操作系统的文件系统。Linux的文件系统的入口就是/,所有的目录、文件、设备都在/之下,/就是Linux文件系统的组织者,也是最上级的领导者。
2、文件系统的类型
LINUX有四种基本文件系统类型:普通文件、目录文件、连接文件和特殊文件,可用file命令来识别。
普通文件:如文本文件、C语言元代码、SHELL脚本、二进制的可执行文件等,可用cat、less、more、vi、emacs来察看内容,用mv来改名。
目录文件:包括文件名、子目录名及其指针。它是LINUX储存文件名的唯一地方,可用ls列出目录文件。
连接文件:是指向同一索引节点的那些目录条目。用ls来查看是,连接文件的标志用l开头,而文件面后以&-&&指向所连接的文件。
特殊文件:LINUX的一些设备如磁盘、终端、打印机等都在文件系统中表示出来,则一类文件就是特殊文件,常放在/dev目录内。例如,软驱A称为/dev/fd0。LINUX无C:的概念,而是用/dev/had来自第一硬盘。
3、目录结构的详细解说
文件系统的组织结构分析,我们能分析什么呢?也就是当我们列/目录时,所看到的 /usr、/etc ... ... /var 等目录是做什么用的,这些目录是不是有些特定的用途。无论哪个哪个版本的Linux系统,都有这些目录,这些目录应该是标准的。当然各个Linux发行版本也会存在一些小小的差异,但总体来说,大体还是差不多。
言归正传,下面飘扬将讲到本文最核心的部分:linux文件系统的目录结构。
/ bLinux文件系统的入口,也是处于最高一级的目录;
/bin 系统所需要的那些命令位于此目录,比如 ls、cp、mkdir等命令;功能和/usr/bin类似,这个目录中的文件都是可执行的、普通用户都可以使用的命令。作为基础系统所需要的最基础的命令就是放在这里。
/boot Linux的内核及引导系统程序所需要的文件目录,比如 vmlinuz initrd.img 文件都位于这个目录中。在一般情况下,GRUB或LILO系统引导管理器也位于这个目录;
/dev 设备文件存储目录,比如声卡、磁盘... ...
/etc 系统配置文件的所在地,一些服务器的配置文件也在这里;比如用户帐号及密码配置文件;
/home 普通用户家目录默认存放目录;
/lib 库文件存放目录
/lost+found 在ext2或ext3文件系统中,当系统意外崩溃或机器意外关机,而产生一些文件碎片放在这里。当系统启动的过程中fsck工具会检查这里,并修复已经损坏的文件系统。 有时系统发生问题,有很多的文件被移到这个目录中,可能会用手工的方式来修复,或移到文件到原来的位置上。
/mnt 这个目录一般是用于存放挂载储存设备的挂载目录的,比如有cdrom 等目录。可以参看/etc/fstab的定义。有时我们可以把让系统开机自动挂载文件系统,把挂载点放在这里也是可以的。主要看/etc/fstab中怎么定义了;比如光驱可以挂载到/mnt/cdrom 。
/opt 表示的是可选择的意思,有些软件包也会被安装在这里,也就是自定义软件包,比如在Fedora Core 5.0中,OpenOffice就是安装在这里。有些我们自己编译的软件包,就可以安装在这个目录中;通过源码包安装的软件,可以通过 ./configure --prefix=/opt/目录 。
/proc 操作系统运行时,进程信息及内核信息(比如cpu、硬盘分区、内存信息等)存放在这里。/proc目录伪装的文件系统proc的挂载目录,proc并不是真正的文件系统,它的定义可以参见 /etc/fstab 。
/root Linux超级权限用户root的家目录;
/sbin 大多是涉及系统管理的命令的存放,是超级权限用户root的可执行命令存放地,普通用户无权限执行这个目录下的命令,这个目录和/usr/ /usr/X11R6/sbin或/usr/local/sbin目录是相似的;我们记住就行了,凡是目录sbin中包含的都是root权限才能执行的。
/tmp 临时文件目录,有时用户运行程序的时候,会产生临时文件。/tmp就用来存放临时文件的。/var/tmp目录和这个目录相似。
/usr 这个是系统存放程序的目录,比如命令、帮助文件等。这个目录下有很多的文件和目录。当我们安装一个Linux发行版官方提供的软件包时,大多安装在这里。如果有涉及服务器配置文件的,会把配置文件安装在/etc目录中。/usr目录下包括涉及字体目录/usr/share/fonts ,帮助目录 /usr/share/man或/usr/share/doc,普通用户可执行文件目录/usr/bin 或/usr/local/bin 或/usr/X11R6/bin ,超级权限用户root的可执行命令存放目录,比如 /usr/sbin 或/usr/X11R6/sbin 或/usr/local/sbin 等;还有程序的头文件存放目录/usr/include。
/var 这个目录的内容是经常变动的,看名字就知道,我们可以理解为vary的缩写,/var下有/var/log 这是用来存放系统日志的目录。/var/www目录是定义Apache服务器站点存放目录;/var/lib 用来存放一些库文件,比如MySQL的,以及MySQL数据库的的存放地;
4、一些重要子目录的解说
下面飘扬再补充几个比较常见且很重要的目录。
/etc/init.d 这个目录是用来存放系统或服务器以System V模式启动的脚本,这在以System V模式启动或初始化的系统中常见。比如Fedora/RedHat;
/etc/xinit.d 如果服务器是通过xinetd模式运行的,它的脚本要放在这个目录下。有些系统没有这个目录, 比如Slackware,有些老的版本也没有。在Rehat/Fedora中比较新的版本中存在。
/etc/rc.d 这是Slackware发行版有的一个目录,是BSD方式启动脚本的存放地;比如定义网卡,服务器开启脚本等。
/etc/X11 这是X-Windows相关的配置文件存放地。
/usr/bin 这个目录是可执行程序的目录,普通用户就有权限执行;当我们从系统自带的软件包安装一个程序时,他的可执行文件大多会放在这个目录。比如安装gaim软件包时。相似的目录是/usr/local/bin;有时/usr/bin中的文件是/usr/local/bin的链接文件;
/usr/sbin 这个目录也是可执行程序的目录,但大多存放涉及系统管理的命令。只有root权限才能执行;相似目录是/sbin 或/usr/local/sbin或/usr/X11R6/sbin等;
/usr/local 这个目录一般是用来存放用户自编译安装软件的存放目录;一般是通过源码包安装的软件,如果没有特别指定安装目录的话,一般是安装在这个目录中。这个目录下面有子目录。自己看看吧。
/usr/share 系统共用的东西存放地,比如 /usr/share/fonts 是字体目录,/usr/share/doc和/usr/share/man帮助文件。
/usr/src 是内核源码存放的目录,比如下面有内核源码目录,比如 linux 、linux-2.xxx.xx 目录等。有的系统也会把源码软件包安装在这里。比如Fedora/Redhat,当我们安装file.src.rpm的时候,这些软件包会安装在 /usr/src/redhat相应的目录中。
/var/adm 比如软件包安装信息、日志、管理信息等,在Slackware操作系统中是有这个目录的。在Fedora中好象没有;自己看看吧。
/var/log 系统日志存放,分析日志要看这个目录的东西;
/var/spool 打印机、邮件、代理服务器等假脱机目录;
5、附录:目录结构的简明查阅手册
(1)“/”根目录部分有以下子目录:
/usr 目录包含所有的命令、程序库、文档和其它文件。这些文件在正常操作中不会被改变的。这个目录也包含你的Linux发行版本的主要的应用程序,譬如,Netscape。
/var 目录包含在正常操作中被改变的文件:假脱机文件、记录文件、加锁文件、临时文件和页格式化文件等
/home 目录包含用户的文件:参数设置文件、个性化文件、文档、数据、EMAIL、缓存数据等。这个目录在系统省级时应该保留。
/proc 目录整个包含虚幻的文件。它们实际上并不存在磁盘上,也不占用任何空间。(用ls –l 可以显示它们的大小)当查看这些文件时,实际上是在访问存在内存中的信息,这些信息用于访问系统
/bin 系统启动时需要的执行文件(二进制),这些文件可以被普通用户使用。
/sbin 系统执行文件(二进制),这些文件不打算被普通用户使用。(普通用户仍然可以使用它们,但要指定目录。)
/etc 操作系统的配置文件目录。
/root 系统管理员(也叫超级用户或根用户)的Home目录。
/dev 设备文件目录。LINUX下设备被当成文件,这样一来硬件被抽象化,便于读写、网络共享以及需要临时装载到文件系统中。正常情况下,设备会有一个独立的子目 录。这些设备的内容会出现在独立的子目录下。LINUX没有所谓的驱动符。
/lib 根文件系统目录下程序和核心模块的共享库。
/boot 用于自举加载程序(LILO或GRUB)的文件。当计算机启动时(如果有多个操作系统,有可能允许你选择启动哪一个操作系统),这些文件首先被装载。这个目录也会包含LINUX核(压缩文件vmlinuz),但LINUX核也可以存在别处,只要配置LILO并且LILO知道LINUX核在哪儿。
/opt 可选的应用程序,譬如,REDHAT 5.2下的KDE (REDHAT 6.0下,KDE放在其它的XWINDOWS应用程序中,主执行程序在/usr/bin目录下)
/tmp 临时文件。该目录会被自动清理干净。
/lost+found 在文件系统修复时恢复的文件
(2)“/usr”目录下比较重要的部分有:
/usr/X11R6 X-WINDOWS系统(version 11, release 6)
/usr/X11 同/usr/X11R6 (/usr/X11R6的符号连接)
/usr/X11R6/bin 大量的小X-WINDOWS应用程序(也可能是一些在其它子目录下大执行文件的符号连接)。
/usr/doc LINUX的文档资料(在更新的系统中,这个目录移到/usr/share/doc)。
/usr/share 独立与你计算机结构的数据,譬如,字典中的词。
/usr/bin和/usr/sbin 类似与“/”根目录下对应的目录(/bin和/sbin),但不用于基本的启动(譬如,在紧急维护中)。大多数命令在这个目录下。
/usr/local 本地管理员安装的应用程序(也可能每个应用程序有单独的子目录)。在“main”安装后,这个目录可能是空的。这个目录下的内容在重安装或升级操作系统后应该存在。
/usr/local/bin 可能是用户安装的小的应用程序,和一些在/usr/local目录下大应用程序的符号连接。
(3)“/proc”目录的内容:
/proc/cpuinfo 关于处理器的信息,如类型、厂家、型号和性能等。
/proc/devices 当前运行内核所配置的所有设备清单。
/proc/dma 当前正在使用的DMA通道。/proc/filesystems 当前运行内核所配置的文件系统。
/proc/interrupts 正在使用的中断,和曾经有多少个中断。
/proc/ioports 当前正在使用的I/O端口。
本文是Linux文件系统的一个组成部分,对于一个系列文档来说,还是必不可缺的。写本文的目的如开头已经叙说的一样,是为了给Linux学习者提供一个关于Linux文件系统的目录结构的参考手册。如有不明之处,请联系飘扬,你可以到我的留言本 给我留言,我会尽力解答你的问题。以此拙作,希望能给大家带去些微的帮助。(T002)
论坛徽章:18
MySQL 备份和恢复策略 收藏
在数据库表丢失或损坏的情况下,备份你的数据库是很重要的。如果发生系统崩溃,你肯定想能够将你的表尽可能丢失最少的数据恢复到崩溃发生时的状态。本文主要对MyISAM表做备份恢复。
备份策略一:直接拷贝数据库文件(不推荐)
备份策略二:使用mysqlhotcopy备份数据库(完全备份,适合小型数据库备份)
备份策略三:使用mysqldump备份数据库(完全+增量备份,适合中型数据库备份)
备份策略四:使用主从复制机制(replication)(实现数据库实时备份)
脚本下载地址:点击下载脚本
备份策略一、直接拷贝数据库文件
直接拷贝数据文件最为直接、快速、方便,但缺点是基本上不能实现增量备份。为了保证数据的一致性,需要在备份文件前,执行以下 SQL 语句:
FLUSH TABLES WITH READ LOCK;
也就是把内存中的数据都刷新到磁盘中,同时锁定数据表,以保证拷贝过程中不会有新的数据写入。这种方法备份出来的数据恢复也很简单,直接拷贝回原来的数据库目录下即可。
备份策略二、使用mysqlhotcopy备份数据库
mysqlhotcopy 是一个 PERL 程序,最初由Tim Bunce编写。它使用 LOCK TABLES、FLUSH TABLES 和 cp 或 scp 来快速备份数据库。它是备份数据库或单个表的最快的途径,但它只能运行在数据库文件(包括数据表定义文件、数据文件、索引文件)所在的机器上,并且mysqlhotcopy 只能用于备份 MyISAM表。
本备份策略适合于小型数据库的备份,数据量不大,可以采用mysqlhotcopy程序每天进行一次完全备份。
备份策略布置:
(1)、安装DBD-mysql perl模块,支持mysqlhotcopy脚本连接到MySQL数据库。
shell& tar -xzvf&&DBD-mysql-4.005.tar.gz
shell& cd DBD-mysql-4.005
shell& unset LANG
shell& perl Makefile.PL -mysql_config=/usr/local/mysql/bin/mysql_config -testuser=root -testpassword=UserPWD
shell& make
shell& make test
shell& make install
(2)、设置crontab任务,每天执行备份脚本
shell& crontab -e
0 3 * * * /root/MySQLBackup/mysqlbackup.sh &/dev/null 2&&1
每天凌晨3:00执行备份脚本。
mysqlbackup.sh注释:
# Name:mysqlbackup.sh
# PS:MySQL DataBase Backup,Use mysqlhotcopy script.
# Write by:i.Stone
# Last Modify:
# 定义变量,请根据具体情况修改
# 定义脚本所在目录
scriptsDir=`pwd`
# 数据库的数据目录
dataDir=/usr/local/mysql/data/
# 数据备份目录
tmpBackupDir=/tmp/tmpbackup/
backupDir=/tmp/mysqlbackup/
# 用来备份数据库的用户名和密码
mysqlUser=root
mysqlPWD=111111
# 定义eMail地址
# 如果临时备份目录存在,清空它,如果不存在则创建它
if [[ -e $tmpBackupDir ]]; then
&&rm -rf $tmpBackupDir/*
&&mkdir $tmpBackupDir
# 如果备份目录不存在则创建它
if [[ ! -e $backupDir ]];then
&&mkdir $backupDir
# 清空MySQLBackup.log
if [[ -s MySQLBackup.log ]]; then
&&cat /dev/null &MySQLBackup.log
# 得到数据库备份列表,在此可以过滤不想备份的数据库
for databases in `find $dataDir -type d | \
&&sed -e &s/\/usr\/local\/mysql\/data\///& | \
&&sed -e &s/test//&`; do
&&if [[ $databases == && ]]; then
& & continue
# 备份数据库
& & /usr/local/mysql/bin/mysqlhotcopy --user=$mysqlUser --password=$mysqlPWD -q &$databases& $tmpBackupDir
& & dateTime=`date &+%Y.%m.%d %H:%M:%S&`
& & echo &$dateTime Database:$databases backup success!& &&MySQLBackup.log
# 压缩备份文件
date=`date -I`
cd $tmpBackupDir
tar czf $backupDir/mysql-$date.tar.gz ./
# 发送邮件通知
if [[ -s MySQLBackup.log ]]; then
&&cat MySQLBackup.log | mail -s &MySQL Backup& $eMail
# 使用smbclientmv.sh脚本上传数据库备份到备份服务器
# $scriptsDir/smbclientmv.sh
smbclientmv.sh注释
# Name:smbclientmv.sh
# PS:Move the data to Backup Server.
# Write by:i.Stone
# Last Modify:
# 定义变量
# 备份服务器名
BackupServer=&BackupServerName&
# 共享文件夹名
BackupShare=&ShareName&
# 备份服务器的访问用户名和密码
BackupUser=&SMBUser&
BackupPW=&SMBPassword&
# 定义备份目录
BackupDir=/tmp/mysqlbackup
date=`date -I`
# Move the data to BackupServer
smbclient //$BackupServer/$BackupShare \
$BackupPW -d0 -W WORKGROUP -U $BackupUser \
-c &put $BackupDir/mysql-$date.tar.gz \
mysql-$date.tar.gz&
# Delete temp files
rm -f $BackupDir/mysql-$date.tar.gz
(3)、恢复数据库到备份时的状态
mysqlhotcopy 备份出来的是整个数据库目录,使用时可以直接拷贝到 mysqld 指定的 datadir (在这里是 /usr/local/mysql/data/)目录下即可,同时要注意权限的问题,如下例:
shell& cp -rf db_name /usr/local/mysql/data/
shell& chown -R mysql:mysql /usr/local/mysql/data/ (将 db_name 目录的属主改成 mysqld 运行用户)
本套备份策略只能恢复数据库到最后一次备份时的状态,要想在崩溃时丢失的数据尽量少应该更频繁的进行备份,要想恢复数据到崩溃时的状态请使用主从复制机制(replication)。
备份策略三、使用mysqldump备份数据库
mysqldump 是采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法。mysqldump 比直接拷贝要慢些。关于mysqldump的更详细解释见最后的附录。
对于中等级别业务量的系统来说,备份策略可以这么定:第一次完全备份,每天一次增量备份,每周再做一次完全备份,如此一直重复。而对于重要的且繁忙的系统来说,则可能需要每天一次全量备份,每小时一次增量备份,甚至更频繁。为了不影响线上业务,实现在线备份,并且能增量备份,最好的办法就是采用主从复制机制(replication),在 slave 机器上做备份。
备份策略布置:
(1)、创建备份目录
Shell& mkdir /tmp/mysqlbackup
Shell& mkdir /tmp/mysqlbackup/daily
(2)、启用二进制日志
采用 binlog 的方法相对来说更灵活,省心省力,而且还可以支持增量备份。
启用 binlog 时必须要重启 mysqld。首先,关闭 mysqld,打开 /etc/my.cnf,加入以下几行:
然后启动 mysqld 就可以了。运行过程中会产生 HOSTNAME-bin.000001 以及 HOSTNAME-bin.index,前面的文件是 mysqld 记录所有对数据的更新操作,后面的文件则是所有 binlog 的索引,都不能轻易删除。关于 binlog 的更详细信息请查看手册。
(3)、配置SSH密钥登录,用于将MySQL备份传送到备份服务器(如果备份服务器为Windows,请跳过此部)。
1)、在MySQL所在服务器(192.168.0.20)生成SSH密钥
[root@lab ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):&&//直接回车
Enter passphrase (empty for no passphrase):& && && &//直接回车,不使用密码
Enter same passphrase again:& && && && && && && &//直接回车,不使用密码
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
c2:96:9f:2d:5a:8e:08:42:43:35:2f:85:5e:72:f8:1c root@lab
2)、在备份服务器(192.168.0.200)上创建目录,修改权限,并传送公钥。
[root@lab ~]# ssh 192.168.0.200 &mkdir .chmod 0700 .ssh&
The authenticity of host '192.168.0.200 (192.168.0.200)' can't be established.
RSA key fingerprint is 37:57:55:c1:32:f1:dd1b:8a:13:6f:89:fb:b8:9d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.200' (RSA) to the list of known hosts.
's password:& &&&//输入备份服务器的root密码
[root@lab ~]# scp .ssh/id_rsa.pub 192.168.0.200:.ssh/authorized_keys2
's password:
id_rsa.pub& && && && && && && && && && && && && && && &100%&&218& &&&0.2KB/s& &00:00& &
3)、测试SSH登录
[root@lab ~]# ssh 192.168.0.200& && & //测试SSH登录
Last login: Fri Nov 16 10:34:02 2007 from 192.168.0.20
[root@lib ~]#
(4)、设置crontab任务,每天执行备份脚本
shell& crontab -e
#每个星期日凌晨3:00执行完全备份脚本
0 3 * * 0 /root/MySQLBackup/mysqlFullBackup.sh &/dev/null 2&&1
#周一到周六凌晨3:00做增量备份
0 3 * * 1-6 /root/MySQLBackup/mysqlDailyBackup.sh &/dev/null 2&&1
mysqlFullBackup.sh注释:
# Name:mysqlFullBackup.sh
# PS:MySQL DataBase Full Backup.
# Write by:i.Stone
# Last Modify:
# Use mysqldump --help get more detail.
# 定义变量,请根据具体情况修改
# 定义脚本目录
scriptsDir=`pwd`
# 定义数据库目录
mysqlDir=/usr/local/mysql
# 定义用于备份数据库的用户名和密码
userPWD=111111
# 定义备份目录
dataBackupDir=/tmp/mysqlbackup
# 定义邮件正文文件
eMailFile=$dataBackupDir/email.txt
# 定义邮件地址
# 定义备份日志文件
logFile=$dataBackupDir/mysqlbackup.log
DATE=`date -I`
echo && & $eMailFile
echo $(date +&%y-%m-%d %H:%M:%S&quot && $eMailFile
cd $dataBackupDir
# 定义备份文件名
dumpFile=mysql_$DATE.sql
GZDumpFile=mysql_$DATE.sql.tar.gz
# 使用mysqldump备份数据库,请根据具体情况设置参数
$mysqlDir/bin/mysqldump -u$user -p$userPWD \
--opt --default-character-set=utf8 --extended-insert=false \
--triggers -R --hex-blob --all-databases \
--flush-logs --delete-master-logs \
--delete-master-logs \
-x & $dumpFile
# 压缩备份文件
if [[ $? == 0 ]]; then
&&tar czf $GZDumpFile $dumpFile && $eMailFile 2&&1
&&echo &BackupFileName:$GZDumpFile& && $eMailFile
&&echo &DataBase Backup Success!& && $eMailFile
&&rm -f $dumpFile
# Delete daily backup files.
&&cd $dataBackupDir/daily
# Delete old backup files(mtime&2).
&&$scriptsDir/rmBackup.sh
# 如果不需要将备份传送到备份服务器或备份服务器为Windows,请将标绿的行注释掉
# Move Backup Files To Backup Server.
#适合Linux(MySQL服务器)到Linux(备份服务器)
&&$scriptsDir/rsyncBackup.sh
&&if (( !$? )); then
& & echo &Move Backup Files To Backup Server Success!& && $eMailFile
& & echo &Move Backup Files To Backup Server Fail!& && $eMailFile
&&echo &DataBase Backup Fail!& && $emailFile
# 写日志文件
echo &--------------------------------------------------------& && $logFile
cat $eMailFile && $logFile
# 发送邮件通知
cat $eMailFile | mail -s &MySQL Backup& $eMail
mysqlDailyBackup.sh注释:
# Name:mysqlDailyBackup.sh
# PS:MySQL DataBase Daily Backup.
# Write by:i.Stone
# Last Modify:
# 定义变量,请根据具体情况修改
# 定义数据库目录和数据目录
scriptsDir=`pwd`
mysqlDir=/usr/local/mysql
dataDir=$mysqlDir/data
# 定义用于备份数据库的用户名和密码
userPWD=111111
# 定义备份目录,每日备份文件备份到$dataBackupDir/daily
dataBackupDir=/tmp/mysqlbackup
dailyBackupDir=$dataBackupDir/daily
# 定义邮件正文文件
eMailFile=$dataBackupDir/email.txt
# 定义邮件地址
# 定义日志文件
logFile=$dataBackupDir/mysqlbackup.log
# 得到数据库所在主机的主机名
HOSTNAME=`uname -n`
echo && & $eMailFile
echo $(date +&%y-%m-%d %H:%M:%S&quot && $eMailFile
# 刷新日志,使数据库使用新的二进制日志文件
$mysqlDir/bin/mysqladmin -u$user -p$userPWD flush-logs
cd $dataDir
# 得到二进制日志列表
fileList=`cat $HOSTNAME-bin.index`
iCounter=0
for file in $fileList
&&iCounter=`expr $iCounter + 1`
for file in $fileList
&&binLogName=`basename $file`
&&nextNum=`expr $nextNum + 1`
# 跳过最后一个二进制日志(数据库当前使用的二进制日志文件)
&&if [[ $nextNum == $iCounter ]]; then
& & echo &Skip lastest!& & /dev/null
& & dest=$dailyBackupDir/$binLogName
# 跳过已经备份的二进制日志文件
& & if [[ -e $dest ]]; then
& && &echo &Skip exist $binLogName!& & /dev/null
# 备份日志文件到备份目录
& && &cp $binLogName $dailyBackupDir
& && &if [[ $? == 0 ]]; then
& && &&&iFile=`expr $iFile + 1`
& && &&&echo &$binLogName Backup Success!& && $eMailFile
if [[ $iFile == 0 ]];then
&&echo &No Binlog Backup!& && $eMailFile
&&echo &Backup $iFile File(s).& && $eMailFile
&&echo &Backup MySQL Binlog OK!& && $eMailFile
# 如果不需要将备份传送到备份服务器或备份服务器为Windows,请将标绿的行注释掉
# Move Backup Files To Backup Server.
#适合Linux(MySQL服务器)到Linux(备份服务器)
&&$scriptsDir/rsyncBackup.sh
&&if [[ $? == 0 ]]; then
& & echo &Move Backup Files To Backup Server Success!& && $eMailFile
& & echo &Move Backup Files To Backup Server Fail!& && $eMailFile
# 发送邮件通知
cat $eMailFile | mail -s &MySQL Backup& $eMail
# 写日志文件
echo &--------------------------------------------------------& && $logFile
cat $eMailFile && $logFile
rsyncBackup.sh注释:
# Name:rsyncBackup.sh
# PS:Move Backup Files To Backup Server.
# Write by:i.Stone
# Last Modify:
# 请根据具体情况修改,注意最后有“/”
# 定义数据库备份目录
dataBackupDir=/tmp/mysqlbackup/
# 定义备份服务器上存放备份数据的目录
backupServerDir=/root/mysqlbackup/
# 定义备份服务器
backupServer=192.168.0.200
# 同步备份文件到备份服务器
rsync -a --delete $dataBackupDir -e ssh $backupServer:$backupServerDir & /dev/null 2&&1
rmBackup.sh注释:
# Name:rmBackup.sh
# PSelete old Backup.
# Write by:i.Stone
# Last Modify:
# 定义备份目录
dataBackupDir=/tmp/mysqlbackup
# 删除mtime&2的日志备份文件
find $dataBackupDir -name &mysql_*.gz& -type f -mtime +2 -exec rm {} \; & /dev/null 2&&1
(5) 、恢复数据库到备份时的状态
用 mysqldump 备份出来的文件是一个可以直接倒入的 SQL 脚本,直接用 mysql 客户端导入就可以了。
/usr/local/mysql/bin/mysql -uroot -pUserPWD db_name & db_name.sql
对于任何可适用的更新日志,将它们作为 mysql 的输入:
  % ls -t -r -1 HOSTNAME-bin* | xargs mysqlbinlog | mysql -uUser -pUserPWD
ls 命令生成更新日志文件的一个单列列表,根据服务器产生它们的次序排序(注意:如果你修改任何一个文件,你将改变排序次序,这将导致更新日志以错误的次序被运用。)
本套备份策略只能恢复数据库到最后一次备份时的状态,要想在崩溃时丢失的数据尽量少应该更频繁的进行备份,要想恢复数据到崩溃时的状态请使用主从复制机制(replication)。如果使用本套备份脚本,将日志文件和数据文件放到不同的磁盘上是一个不错的主义,这样不仅可以提高数据写入速度,还能使数据更安全。
论坛徽章:18
MySQL中mysqldump命令的使用方法
[日期:] & & & & 来源:&&作者: & & & &
MySQL有很多可以导入数据的方法,然而这些只是数据传输中的一半,另外的一般是从MySQL数据库中导出数据。有许多的原因我们需要导出数据。一个重要的原因是用于备份数据库。数据的造价常常是昂贵的,需要谨慎处理它们。经常地备份可以帮助防止宝贵数据地丢失;另外一个原因是,也许您希望导出数据来共享。 在这个信息技术不断成长的世界中,共享数据变得越来越常见。
比方说Macmillan USA维护护着一个将要出版的书籍的大型数据库。这个数据库在许多书店之间共享,这样他们就知道哪些书将会很快出版。医院越来越走向采用无纸病历记录,这样这些病历可以随时跟着你。世界变得越来越小,信息也被共享得越来越多。有很多中导出数据得方法,它们都跟导入数据很相似。因为,毕竟,这些都只是一种透视得方式。从数据库导出的数据就是从另一端导入的数据。这里我们并不讨论其他的数据库各种各样的导出数据的方法,您将学会如何用MySQL来实现数据导出。
使用mysqldump:
(mysqldump命令位于mysql/bin/目录中)
mysqldump工具很多方面类似相反作用的工具mysqlimport。它们有一些同样的选项。但mysqldump能够做更多的事情。它可以把整个数据库装载到一个单独的文本文件中。这个文件包含有所有重建您的数据库所需要的SQL命令。这个命令取得所有的模式(Schema,后面有解释)并且将其转换成DDL语法(CREATE语句,即数据库定义语句),取得所有的数据,并且从这些数据中创建INSERT语句。这个工具将您的数据库中所有的设计倒转。因为所有的东西都被包含到了一个文本文件中。这个文本文件可以用一个简单的批处理和一个合适SQL语句导回到MySQL中。这个工具令人难以置信地简单而快速。决不会有半点让人头疼地地方。
因此,如果您像装载整个数据库Meet_A_Geek的内容到一个文件中,可以使用下面的命令:
bin/mysqldump –p Meet_A_Geek & MeetAGeek_Dump_File.txt
这个语句也允许您指定一个表进行dump(备份/导出/装载?)。如果您只是希望把数据库Meet_A_Geek中的表Orders中的整个内容导出到一个文件,可以使用下面的命令:
bin/mysqldump –p Meet_A_Geek Orders & MeetAGeek_Orders.txt
这个非常的灵活,您甚至可以使用WHERE从句来选择您需要的记录导出到文件中。要达到这样的目的,可以使用类似于下面的命令:
bin/mysqldump –p –where=&Order_ID & 2000& Meet_A_Geek Orders & Special_Dump.txt
mysqldump工具有大量的选项,部分选项如下表:
选项/Option 作用/Action Performed
--add-drop-table
这个选项将会在每一个表的前面加上DROP TABLE IF EXISTS语句,这样可以保证导回MySQL数据库的时候不会出错,因为每次导回的时候,都会首先检查表是否存在,存在就删除
--add-locks
这个选项会在INSERT语句中捆上一个LOCK TABLE和UNLOCK TABLE语句。这就防止在这些记录被再次导入数据库时其他用户对表进行的操作
-c or - complete_insert
这个选项使得mysqldump命令给每一个产生INSERT语句加上列(field)的名字。当把数据导出导另外一个数据库时这个选项很有用。
--delayed-insert 在INSERT命令中加入DELAY选项
-F or -flush-logs 使用这个选项,在执行导出之前将会刷新MySQL服务器的log.
-f or -force 使用这个选项,即使有错误发生,仍然继续导出
--full 这个选项把附加信息也加到CREATE TABLE的语句中
-l or -lock-tables 使用这个选项,导出表的时候服务器将会给表加锁。
-t or -no-create- info
这个选项使的mysqldump命令不创建CREATE TABLE语句,这个选项在您只需要数据而不需要DDL(数据库定义语句)时很方便。
-d or -no-data 这个选项使的mysqldump命令不创建INSERT语句。
在您只需要DDL语句时,可以使用这个选项。
--opt 此选项将打开所有会提高文件导出速度和创造一个可以更快导入的文件的选项。
-q or -quick 这个选项使得MySQL不会把整个导出的内容读入内存再执行导出,而是在读到的时候就写入导文件中。
-T path or -tab = path 这个选项将会创建两个文件,一个文件包含DDL语句或者表创建语句,另一个文件包含数据。DDL文件被命名为table_name.sql,数据文件被命名为table_name.txt.路径名是存放这两个文件的目录。目录必须已经存在,并且命令的使用者有对文件的特权。
-w &WHERE Clause& or -where = &Where clause &
如前面所讲的,您可以使用这一选项来过筛选将要放到 导出文件的数据。
假定您需要为一个表单中要用到的帐号建立一个文件,经理要看今年(2004年)所有的订单(Orders),它们并不对DDL感兴趣,并且需要文件有逗号分隔,因为这样就很容易导入到Excel中。 为了完成这个人物,您可以使用下面的句子:
bin/mysqldump –p –where &Order_Date & =''&
–tab = /home/mark –no-create-info –fields-terminated-by=, Meet_A_Geek Orders
这将会得到您想要的结果。
schema:模式
The set of statements, expressed in data definition language, that completely describe the structure of a data base.
一组以数据定义语言来表达的语句集,该语句集完整地描述了数据库的结构。
SELECT INTO OUTFILE :
如果您觉得mysqldump工具不够酷,就使用SELECT INTO OUTFILE吧, MySQL同样提供一个跟LOAD DATA INFILE命令有相反作用的命令,这就是SELECT INTO OUTFILE 命令,这两个命令有很多的相似之处。首先,它们有所有的选项几乎相同。现在您需要完成前面用mysqldump完成的功能,可以依照下面的步骤进行操作:
1. 确保mysqld进程(服务)已经在运行
2. cd /usr/local/mysql
3. bin/mysqladmin ping ;// 如果这个句子通不过,可以用这个:mysqladmin -u root -p ping
mysqladmin ping用于检测mysqld的状态,is alive说明正在运行,出错则可能需要用户名和密码。
4. 启动MySQL 监听程序.
5. bin/mysql –p Meet_A_Geek;// 进入mysql命令行,并且打开数据库Meet_A_Geek,需要输入密码
6. 在命令行中,输入一下命令:
SELECT * INTO OUTFILE '/home/mark/Orders.txt'
TERMINATED BY = ','
FROM Orders
WHERE Order_Date & = ''
在你按了Return(回车)之后,文件就创建了。这个句子就像一个规则的SELECT语句,只是把想屏幕的输出重定向到了文件中。这意味这您可以使用JOIN来实现多表的高级查询。这个特点也可以被用作一个报表产生器。
比方说,您可以组合这一章中讨论的方法来产生一个非常有趣的查询,试试这个:
在mysql目录建立一个名为Report_G.rpt 的文本文件,加入下面的行:
USE Meet_A_G
INSERT INTO Customers (Customer_ID, Last_Name, First_Name)
VALUES (NULL, &Kinnard&, &Vicky&);
INSERT INTO Customers (Customer_ID, Last_Name, First_Name)
VALUES (NULL, &Kinnard&, &Steven&);
INSERT INTO Customers (Customer_ID, Last_Name, First_Name)
VALUES (NULL, &Brown&, &Sam&);
SELECT Last_Name INTO OUTFILE '/home/mark/Report.rpt'
FROM Customers WHERE Customer_ID & 1;
然后确认 mysql进程在运行,并且您在mysql目录中, 输入下面的命令:
论坛徽章:4
论坛徽章:4
这个不光是安装还包括使用了
论坛徽章:0
我想请教一个问题,我用的是FC7 ,安装client能成功,但是安装MySQL-server-community-5.1.34-0.rhel5.i386.rpm失败,不知道是什么原因,能给解答一下。以下是控制台信息。多谢了!!
[root@localhost local]# rpm -ivh MySQL-server-.i386.rpm
Preparing...& && && && && & ########################################### [100%]
& && &&&file /etc/my.cnf from install of MySQL-server-community-5.0.81-0.rhel3 conflicts with file from package mysql-libs-5.0.45-6.fc7
& && &&&file /usr/share/mysql/charsets/README from install of MySQL-server-community-5.0.81-0.rhel3 conflicts with file from package mysql-libs-5.0.45-6.fc7
& && &&&file /usr/share/mysql/charsets/ascii.xml from install of MySQL-server-community-5.0.81-0.rhel3 conflicts with file from package mysql-libs-5.0.45-6.fc7
& && &&&file /usr/share/mysql/czech/errmsg.sys from install of MySQL-server-community-5.0.81-0.rhel3 conflicts with file from package mysql-libs-5.0.45-6.fc7
& && &&&file /usr/share/mysql/danish/errmsg.sys from install of MySQL-server-community-5.0.81-0.rhel3 conflicts with file from package mysql-libs-5.0.45-6.fc7
& && &&&file /usr/share/mysql/dutch/errmsg.sys from install of MySQL-server-community-5.0.81-0.rhel3 conflicts with file from package mysql-libs-5.0.45-6.fc7
& && &&&file /usr/share/mysql/english/errmsg.sys from install of MySQL-server-community-5.0.81-0.rhel3 conflicts with file from package mysql-libs-5.0.45-6.fc7
& && &&&file /usr/share/mysql/estonian/errmsg.sys from install of MySQL-server-community-5.0.81-0.rhel3 conflicts with file from package mysql-libs-5.0.45-6.fc7
& && &&&file /usr/share/mysql/french/errmsg.}

我要回帖

更多关于 linux mysql 初始化 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信