mysql启动故障(简写)

问题描述和思路mysql

下午作svn钩子文档时,开发大哥跑来,说mysql启动报错,半个小时没找到解决的办法,报错内容为:StartingMySQL. ERROR! The server quit without updating PID filec++

根据大哥的描述,立刻想到多是mysql高速运行下,作大量数据查询时候,卡的时候,强制杀掉mysql数据库,因为主主模式不是很熟悉,判断是两边数据写入不同,致使起不来,立刻想到单个服务器启动,进入127服务器,打开my.cnf文件,server-id注销,启动仍是报错,查看日志,也是提示找不到pid文件,进入相关目录/var/run/mysqld/mysqld.pid,发现根本没有,在数据库配置文件中指定mysql.pid文件仍是报错,可能大体分析出强制杀掉进程致使数据结构出现问题,mysqld_safe --user=mysql &安全模式进入,可是仍是报错,因为不熟悉公司总体架构,这时已经有点绝望,大哥过来讲先找到备份问题,而后考虑从新初始化,可是mysqlyum安装,没有install_db初始化命令。这时候,沈哥找到了备份数据,上月的全备,根据相应的脚本也找到相应的增量备份。sql

 

 

问题过后回顾数据库

启动mysql服务时出现以下错误,可查看错误日志找出错误缘由。bootstrap

ErrorStarting 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而字符集是latin1app

解决方法:在配置文件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_logfile0ib_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

默认编译的存储引擎包括:csvmyisammyisammrgheap。若要安装其它存储引擎,可使用相似以下编译选项:

-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

立刻想到51cto一篇博文提到过相似

解决:

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-onlyall权限的用户没有用

受权主库只给insertupdatedeleteselect权限便可

grant select,insert,update,delete on'adhulu'.* to 'adhulu'@'%' identified by 'XXX';

受权主库只给select权限便可

grant select on adhulu.* to 'adhulu'@'%'identified by 'XXX';

平时禁止任何人登陆从库操做。

相关文章
相关标签/搜索