设为首页 收藏本站
查看: 552|回复: 0

[经验分享] mysql启动故障(简写)

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-11-12 08:32:14 | 显示全部楼层 |阅读模式
问题描述和思路
下午做svn钩子文档时,开发大哥跑来,说mysql启动报错,半个小时没找到解决的办法,报错内容为:StartingMySQL. ERROR! The server quit without updating PID file
根据大哥的描述,马上想到可能是mysql高速运行下,做大量数据查询时候,卡的时候,强制杀掉mysql数据库,由于主主模式不是很熟悉,判断是两边数据写入不一样,导致起不来,马上想到单个服务器启动,进入127服务器,打开my.cnf文件,server-id注销,启动还是报错,查看日志,也是提示找不到pid文件,进入相关目录/var/run/mysqld/mysqld.pid,发现根本没有,在数据库配置文件中指定mysql.pid文件还是报错,可能大致分析出强制杀掉进程导致数据结构出现问题,mysqld_safe --user=mysql &安全模式进入,但是还是报错,由于不熟悉公司整体架构,这时已经有点绝望,大哥过来说先找到备份问题,然后考虑重新初始化,但是mysql是yum安装,没有install_db初始化命令。这时候,沈哥找到了备份数据,上月的全备,根据相应的脚本也找到相应的增量备份。


问题事后回顾
启动mysql服务时出现如下错误,可查看错误日志找出错误原因。
Error:Starting MySQL.The server quitwithout updating PID file (/data/mysql/failed184_sles10.pid).
Error:
13073010:15:37 [ERROR] COLLATION 'utf8_general_ci' is not valid for CHARACTER SET'latin1'
13073010:15:37 [ERROR] Aborting
若错误日志中出现如上错误,则是在编译的时候字符集与校对集没有对应。校对集时utf8_general_ci,而字符集是latin1。
解决方法:在配置文件my.cnf 中的[mysqld]下面加上 -DDEFAULT_CHARSET=utf8;-DDEFAULT_COLLATION=utf8_general_ci 这两条语句。“utf8”和“utf8_general_ci ”可改成相应的字符集合校对集。修改完后看能否启动成功,若是出现同样的问题,那没办法只能从头编译再装了。

Error:
13073014:46:20 [ERROR] Plugin 'InnoDB' init function returned error.
13073014:46:20 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
13073014:46:20 [ERROR] Unknown/unsupported storage engine: InnoDB
13073014:46:20 [ERROR] Aborting
出现如上错误可能是innodb在启动时出了问题。
解决方法:在配置文件里面写上 [mysqld]skip-innodb 或者在data目录下将文件ib_logfile0、ib_logfile1删除即可
CMake Error: The source directory"/data/cheriegong" does not appear to contain CMakeLists.txt.
若编译时出现以上错误,需要把预编译里面的MYSQL_USER去掉,即可预编译成功!

mysql编译准备

综合评估后决定重新编译mysql,版本选择,想了很久,决定用已经稳定,相应网上有很多资料来源的5.5版本mysql,编译的过程如下
开始用cmake2.8.8.tar.gz,
# tar xfcmake-2.8.8.tar.gz
# cdcmake-2.8.8
# ./bootstrap
# make
# make install

cmake 官方说明
cmake的重要特性之一是其独立于源码(out-of-source)的编译功能,即编译工作可以在另一个指定的目录中而非源码目录中进行,这可以保证源码目录不受任何一次编译的影响,因此在同一个源码树上可以进行多次不同的编译,如针对于不同平台编译。
编译mysql提示cmake安装不对,MD5校对mysql,发现不对,果断卸载,yum安装
yum –y install cmake
然后rz上传mysql-5.5.28.tar.gz到跳板机,然后scp推送到127数据库(考虑是现在一台数据库服务器上先重新编译,如果不对,至少还有一台mysql没有动过,可能恢复一些默认值,保险一些)。
cmake的编译不同于make编译方式,用cmake获取帮组
./configure         cmake .     编译方式
./configure --help    cmake . -LH or ccmake .   获取编译参数的帮组命令

编译安装mysql
mysql 5.5不同于5.6,需要在编译的时候指定默认是inodb数据库引擎,5.6之后就是默认的,但是5.1是不支持inodb,但是5.5.28修复了以前大量的bug,稳定而且资料好找。
编译帮组
指定安装文件的安装路径时常用的选项:
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql
-DMYSQL_DATADIR=/data/mysql
-DSYSCONFDIR=/etc
默认编译的存储引擎包括:csv、myisam、myisammrg和heap。若要安装其它存储引擎,可以使用类似如下编译选项:
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DWITH_FEDERATED_STORAGE_ENGINE=1

若要明确指定不编译某存储引擎,可以使用类似如下的选项:
-DWITHOUT_<ENGINE>_STORAGE_ENGINE=1
比如:
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1
-DWITHOUT_FEDERATED_STORAGE_ENGINE=1
-DWITHOUT_PARTITION_STORAGE_ENGINE=1

如若要编译进其它功能,如SSL等,则可使用类似如下选项来实现编译时使用某库或不使用某库:
-DWITH_READLINE=1
-DWITH_SSL=system
-DWITH_ZLIB=system
-DWITH_LIBWRAP=0

其它常用的选项:
-DMYSQL_TCP_PORT=3306
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock
-DENABLED_LOCAL_INFILE=1
-DEXTRA_CHARSETS=all
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci
-DWITH_DEBUG=0
-DENABLE_PROFILING=1


编译安装

# groupadd -r mysql
# useradd -g mysql -r –s /sbin/nologinmysql
# tar xf mysql-5.5.28.tar.gz
# cd mysql-5.5.28
# cmake . -DCMAKE_INSTALL_PREFIX=/opt/mysql\      指定安装目录
       -DMYSQL_DATADIR=/data/mysqldb \        指定数据库存放目录
       -DSYSCONFDIR=/etc \       指定配置文件
                   -DWITH_INNOBASE_STORAGE_ENGINE=1\    编译indodb引擎进mysql,其实默认
       -DWITH_ARCHIVE_STORAGE_ENGINE=1 \  编译ARCHIVE引擎,其实默认编译也有
       -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ 编译黑洞引擎,做mysql结构可能用到
                   -DWITH_SSL=system\         支持ssl
                   -DWITH_ZLIB=system\         支持zlib
                   -DMYSQL_UNIX_ADDR=/tmp/mysql.sock\   指定mysql客户端sock文件
                   -DDEFAULT_CHARSET=utf8\               指定默认字符集为utf8
       -DDEFAULT_COLLATION=utf8_general_ci    指定默认数据库字符

报错:



Could NOT find Curses (missing:  CURSES_LIBRARY CURSES_INCLUDE_PATH)
CMake Error at cmake/readlineNaNake:82(MESSAGE):
Curses library not found.  Please install appropriate package,
-- Configuring incomplete, errors occurred!
yum -y install ncurses-devel

rm CMakeCache.txt  删除编译文件,再次编译再次报错
Warning:Bison executable not found in PATH
yum –y install bison

-- The C compiler identification is unknown

-- The CXX compiler identification is unknown

提示没有gcc编译
yum –y install gcc gcc-c++

再次编译提示OK
需要yum –yinstall bison gcc gcc-c++ ncurses-devel

make && makeinstall

配置mysql主从
原来备份的my.cnf用于新编译的,把/opt下面的mysql.server拷贝到/etc/init.d目录下面,启动mysql,配置my.cnf,作为主库
server_id = 1  主库的id值为1
log_bin = /data/mysql5.5binlog/mysql-binlog      开启binlog日志
max_binlog_size = 512M   binlog最大为多少后,就自动更新
read-only = 1   表示可写,0为只读

初始化mysql数据库
/opt/mysql/scripts/mysql_install_db--user=mysql --basedir=/opt/mysql --datadir=/data/mysqldb
报错(心都凉了)
[ERROR] COLLATION 'latin1_swedish_ci' isnot valid for CHARACTER SET
马上想到iyunv一篇博文提到过类似
解决:
在my.cnf文件中加入一行
character-set-server=latin1
重新初始化OK
启动mysql
登录设置相应的权限
创建mysql同步的用户slaveyimi,设置为只能从库ip权限
做好相应准备,开始配置主从同步

主库操作
主库,锁表备份所有所有库,备份完之后,就unlock tables;解锁表
一定不要--all-database (会备份数据库结构)mysqldump -uroot -p amc|gzip > /backup/mysql/$(date+%F)-amc.sql.gz
mysqldump -uroot -p adhulu|gzip >/backup/mysql/$(date +%F)-adhulu.sql.gz
把sql.gz文件推送到从库那台服务器,从库的mysql编译安装略
注意:从库做完相应的配置,一定要重启,我捣鼓半天原来是没重启,主从老是不对
导入全备数据
mysql -uroot -p'密码' <full.sql
登录数据库,执行下面命令
CHANGE MASTER TO
    MASTER_HOST='10.163.2.127',   主库ip地址
    MASTER_PORT=3306,           主库端口
    MASTER_USER='slaveyimi',     主从同步用户
    MASTER_PASSWORD='password',  用户密码
    MASTER_LOG_FILE='mysql-binlog.000004', binlog最新文件名称
    MASTER_LOG_POS=108502907;     偏移值(查看showmaster status\G;获取得到)

开启同步,slave start,不同版本不一样,也可能是start slave;
在从库上查看是否同步
show slave status\G;
下面表示同步成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0

限制从库写入方法
在从库的my.cnf的配置文件加入read-only
read-only = 1
而且在给从库的用户授权时候,一定不要给all权限,read-only对all权限的用户没有用
授权主库只给insert,update,delete,select权限即可
grant select,insert,update,delete on'adhulu'.* to 'adhulu'@'%' identified by 'XXX';
授权主库只给select权限即可
grant select on adhulu.* to 'adhulu'@'%'identified by 'XXX';
平时禁止任何人登录从库操作。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-28165-1-1.html 上篇帖子: mysql5.6 源码安装脚本 下篇帖子: MySQL5.7 支持一个表有多个INSERT/DELETE/UPDATE触发器 mysql
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表