linux start+log+bak

1.启动

启动第一步--加载BIOS

BIOS是英文"Basic Input Output System"的缩略语,直译过来后中文名称就是"基本输入输出系统"。其实,它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序。 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。

当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了。


启动第二步--读取MBR

众所周知,硬盘上第0磁道(最靠近圆心)第一个扇区被称为MBR,也就是Master Boot Record,即主引导记录,它的大小是512字节(每个扇区都可以存放512个字节信息),别看地方不大,可里面却存放了预启动信息、分区表信息。

系统找到BIOS所指定的硬盘的MBR后,就会将其复制到0×7c00地址所在的物理内存中。其实被复制到物理内存的内容就是Boot Loader,而具体到你的电脑,那就是lilo或者grub了。

在/boot/grub/ 我们会看到有两个文件stage1,stage2,基中stage1是512字节,stage2就比较大了,其实这一步启动的过程是这样:MBR->stage1->stage2->boot loader,stage1是存放在MBR中的,因为stage2较大,无法存放在只能存放512字节的第一个扇区中,所以只能以文件系统的格式存放。由stage1来引导加载stage2。

对于RHEL,boot loader就是grub。


启动第三步--Boot Loader

Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。

Boot Loader有若干种,其中Grub、Lilo和spfdisk是常见的Loader。

系统读取内存中的grub配置信息(一般为menu.lst或grub.lst),并依照此配置信息来启动不同的操作系统。

在linux下/boot/grub/下,有menu.lst 。grub.conf为menu.lst的软链接。此文件内容如下:default=0

timeout=5

splashimage=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

title Red Hat Enterprise Linux Server (2.6.18-164.el5)

        root (hd0,0)

        kernel /vmlinuz-2.6.18-164.el5 ro root=LABEL=/ rhgb quiet

        initrd /initrd-2.6.18-164.el5.img


启动第四步--加载内核

根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。此时,屏幕一般会输出“Uncompressing Linux”的提示。当解压缩内核完成后,屏幕输出“OK, booting the kernel”。


系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。至此,Linux内核已经建立起来了,基于Linux的程序应该可以正常运行了。


启动第五步--用户层init依据inittab文件来设定运行等级

内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据此文件来进行初始化工作。


其实/etc/inittab文件最主要的作用就是设定Linux的运行等级,其设定形式是“:id:5:initdefault:”,这就表明Linux需要运行在等级5上。Linux的运行等级设定如下:


0:关机


1:单用户模式(单用户模式最重要的作用是修复系统或进行密码遗忘后的修改)


2:无网络支持的多用户模式


3:有网络支持的多用户模式(一般作为服务器的linux系统,运行在此级别在,用命令行操作,节省了对内存的使用)


4:保留,未使用


5:有网络支持有X-Window支持的多用户模式


6:重新引导系统,即重启


关于/etc/inittab文件的学问,其实还有很多。


启动第六步--init进程执行rc.sysinit

在设定了运行等级后,Linux系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序,它做的工作非常多,包括设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等。如果有兴趣,可以到/etc/rc.d中查看一下rc.sysinit文件。


启动第七步--启动内核模块

具体是依据/etc/modprobe.conff文件或/etc/modprobe.d(有的linux版本在/etc/modules.conf)目录下的文件来装载内核模块。

在此配置文件中只是配置有需要开机就要加载的模块,比如网卡驱动和硬盘驱动,如下:

# vim /etc/modprobe.conf

alias scsi_hostadapter mptbase

alias scsi_hostadapter1 mptspi

alias scsi_hostadapter2 ata_piix

alias eth0 pcnet32

alias eth1 pcnet32

启动第八步--执行不同运行级别的脚本程序

根据运行级别的不同,系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。脚本所在位置/etc/rc.d/

在此目录下有两大类文件,一类是以K开头,另一类以S开头。K开头表示当运行当前级别的时候先kill掉此服务,意思为此级别下不自动启动该服务;S开头的表示当运行当前级别的时候先启动此服务。下面以vsftpd服务为例说明:

默认状态下在/etc/rc.d/rc3.d/是以K50vsftpd存在,查看级别下状态:

# chkconfig --list | grep vsftpd

vsftpd            0:关闭    1:关闭    2:关闭    3:关闭    4:关闭    5:关闭    6:关闭

修改级别下状态并查看:

# chkconfig --level 3 vsftpd on

# chkconfig --list | grep vsftpd

vsftpd            0:关闭    1:关闭    2:关闭    3:启用    4:关闭    5:关闭    6:关闭

再查看/etc/rc.d/rc3.d/下vsftpd的文件变为:S60vsftpd

启动第九步--执行/etc/rc.d/rc.local

你如果打开了此文件,里面有一句话,读过之后,你就会对此命令的作用一目了然:


# This script will be executed *after* all the other init scripts.

# You can put your own initialization stuff in here if you don’t

# want to do the full Sys V style init stuff.


rc.local就是在一切初始化工作后,Linux留给用户进行个性化的地方。你可以把你想设置和启动的东西放到这里。

此文件在/etc/rc.local有软链,服务器上常会用到,比如设置开机启动nginx服务:

在/etc/rc.local下追加下面一句:

/usr/local/nginx/sbin/nginx


启动第十步--执行/bin/login程序,进入登录状态

此时,系统已经进入到了等待用户输入username和password的时候了,你已经可以用自己的帐号登入系统了。


2.log

log:

/var/log/cron

/var/log/dmesg

/var/log/lastlog

/varlog/maillog

var/log/messages        //most of logs

/var/log/secure/

/var/log/wtmp  + faillog

/var/log/httpd/*    news  samba

tool:

syslogd    登录系统和网络服务  

(/ec/syslog.conf 配置文件)  +chattr lsattr(隐藏和不可删属性) +/etc/sysconfig/syslog(日志服务器配置)

klogd        登录内核各项信息

logrotate   日志文件轮替  logrotate.conf(设计默认删除多出来的日志文件的大小和频度)


3.bak


数据:/etc  /home  /var/spool/mail  /boot  /root

频度:每日 每周 每月 | 常变动  不常变动

分类:

完整备份 dd cpio dump/restore tar dump   

+增量备份 dump -0u |-1u   + tar -exclude 不需要的文件  

+差异备份 tar -N   rsync -av

--------------------------------diff--------------------------------------

增量备份速度快,每天备份的是前一天备份对比的差异,还原慢

差异备份速度慢,每天备份的是与完整备份对比的差异,还原快

-------------------------------------------------------------------------- 


<think>好的,我现在要解决用户的问题:在Linux中启动MySQL服务后,它立即停止了。用户需要解决方案。首先,我需要回忆一下常见的导致MySQL无法正常启动的原因。可能包括配置文件错误、权限问题、磁盘空间不足、端口冲突、日志文件问题或者数据目录损坏等等。 根据用户提供的引用内容,引用[1]提到用命令`net start mysql5`启动服务,可能用户使用的是旧版本的MySQL,或者服务名不同。但用户现在是在Linux环境下,所以需要调整思路,因为Linux的服务管理通常用systemctl或者service命令。可能用户混淆了Windows和Linux的命令,但问题描述明确指出是Linux系统,所以应该排除Windows相关的内容。 接下来,查看用户提供的引用[3],里面提到了MySQL 8.0的复制应用线程和事件处理,这可能与主从复制有关,但用户的问题是关于服务启动立即停止,可能复制配置错误也可能导致启动失败,但需要更多信息。不过用户的问题描述没有提到主从复制,所以可能其他原因更常见。 首先,我应该建议用户检查错误日志,因为MySQL在启动失败时通常会在错误日志中记录详细信息。错误日志的位置通常在`/var/log/mysql/error.log`或者`/var/log/mysqld.log`,也可能在数据目录下。用户可以通过查找my.cnf配置文件中的log-error选项来确定具体位置。 如果日志显示权限问题,比如数据目录的所属用户或组不是mysql,那么需要修改权限。例如,使用`chown -R mysql:mysql /var/lib/mysql`。另外,如果SELinux或AppArmor启用,可能会阻止MySQL访问所需文件,可以尝试临时禁用这些安全模块来测试是否是它们导致的问题。 磁盘空间不足也是一个常见原因。用户可以使用`df -h`检查磁盘空间,特别是MySQL数据目录所在的分区。如果空间不足,需要清理空间或者扩展存储。 配置文件错误,比如my.cnf中存在语法错误,或者配置了无效的参数,也可能导致服务无法启动。用户可以尝试注释掉最近的修改,或者使用默认配置文件测试。 端口冲突的情况,比如3306端口被其他进程占用,可以使用`netstat -tulnp | grep 3306`查看是否有其他程序占用,如果有,需要终止该进程或修改MySQL的端口配置。 InnoDB损坏也是一个可能的原因,尤其是如果MySQL之前异常关闭。可以尝试在配置文件中添加`innodb_force_recovery=1`到`6`的不同级别,逐级尝试启动并修复表。成功后,应备份数据并重新初始化数据库。 另外,MySQL的数据目录未初始化或初始化失败也可能导致问题。用户需要确保使用`mysqld --initialize`或`mysql_install_db`正确初始化数据目录,并检查是否有错误输出。 还有可能是内存不足,导致MySQL进程被OOM Killer终止。查看系统日志(如`/var/log/syslog`)是否有相关记录,调整内存设置或增加交换空间。 用户可能还需要检查是否存在损坏的二进制日志或者中继日志,尤其是在复制环境中,这可能导致启动失败。可以尝试清理或重置这些日志。 总结一下,解决步骤可能包括: 1. 检查错误日志,确定具体错误信息。 2. 检查数据目录权限和磁盘空间。 3. 验证配置文件是否正确。 4. 检查端口冲突和内存问题。 5. 尝试修复InnoDB表或数据目录。 6. 考虑安全模块的影响。 在用户提供的引用中,引用[3]提到了使用performance_schema中的events_stages_current表来监控复制应用线程的进度,这可能与复制有关的问题,但用户的问题更可能是基础配置或环境问题导致的服务启动失败。所以需要优先排查这些常见原因。 最后,生成相关问题,可能涉及如何查看MySQL错误日志、如何修改数据目录权限、如何修复InnoDB表损坏等。</think>### 解决MySQL服务启动后立即停止的步骤 #### 1. **查看错误日志定位原因** MySQL启动失败时,错误日志是首要排查点。日志路径通常位于: - `/var/log/mysql/error.log` - `/var/log/mysqld.log` - 或通过配置文件`my.cnf`中的`log-error`参数确认: ```bash grep "log-error" /etc/mysql/my.cnf ``` 若日志显示类似`InnoDB: Database was not shut down normally`,可能是数据损坏;若提示权限问题,需检查目录所有权[^3]。 #### 2. **检查数据目录权限** 确保MySQL数据目录(默认`/var/lib/mysql`)的所有权为`mysql`用户: ```bash sudo chown -R mysql:mysql /var/lib/mysql ``` 若使用SELinux或AppArmor,临时禁用以测试是否被拦截: ```bash sudo setenforce 0 # 临时关闭SELinux sudo systemctl restart mysql ``` #### 3. **验证配置文件语法** 配置文件错误会导致服务立即终止。使用以下命令检查语法: ```bash mysqld --validate-config ``` 若报错,逐行检查`/etc/mysql/my.cnf`或自定义配置文件,注释掉可疑参数(如错误的内存分配)。 #### 4. **排查磁盘空间和内存问题** - 检查磁盘空间: ```bash df -h /var/lib/mysql ``` - 若空间不足,清理日志文件或临时文件。 - 检查系统日志(如`/var/log/syslog`)是否因内存不足触发OOM Killer终止MySQL进程。 #### 5. **修复InnoDB表损坏** 若日志提示表损坏,尝试强制恢复: 1. 编辑`my.cnf`,添加: ```ini innodb_force_recovery = 1 ``` 2. 逐步增加该值(1~6)直至MySQL能启动。 3. 启动后立即备份数据,然后重新初始化数据库。 #### 6. **检查端口冲突** 确认3306端口未被占用: ```bash sudo netstat -tulnp | grep 3306 ``` 若冲突,终止占用进程或修改MySQL配置中的端口。 #### 7. **重新初始化数据目录** 若数据目录损坏,备份后重新初始化: ```bash sudo mv /var/lib/mysql /var/lib/mysql.bak sudo mysqld --initialize --user=mysql sudo systemctl start mysql ``` --- ### 相关问题 1. **如何查看MySQL的错误日志路径?** 通过`my.cnf`中的`log-error`参数或默认路径查找,如`/var/log/mysql/error.log`[^3]。 2. **如何修复因权限问题导致的MySQL启动失败?** 使用`chown -R mysql:mysql /var/lib/mysql`并检查SELinux/AppArmor配置。 3. **InnoDB表损坏的常见修复方法有哪些?** 通过`innodb_force_recovery`模式启动后导出数据,或使用`mysqlcheck`工具修复。 --- 通过以上步骤逐步排查,可解决大多数MySQL服务启动后立即停止的问题。若问题仍未解决,建议结合具体错误日志进一步分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值