安全删除 MySQL binlog 日志文件

在MySQL数据库中,我们做主从数据同步,一般都是依赖于MySQL的binlog来进行数据同步。日积月累之下,主数据库的binlog日志文件体积会越来越大,终有一天会撑爆我们的服务器硬盘。这时就需要对其进行安全删除,在删除binlog的同时,保证主从数据库关系不断开,并且不需要重启活着关闭MySQL服务。

操作命令如下:

登陆从数据库数据库服务器

# mysql -uroot -p

在从数据库上执行命令,查看当前主从状态所依赖的binlog文件

mysql> show slave status;

可以看到,当前正在使用的binlog文件名是mysql-bin.000040

登陆主数据库服务器

# mysql -uroot -p

在主数据库上执行命令,删除历史的binlog

mysql> purge master logs to 'mysql-bin.000040';

OK了,大功告成!

去看看你的磁盘空间吧。。。。

MySQL导出数据库出现“cannot load from mysql.proc”错误的解决办法

记不得从什么时候开始,服务器上的mysql导出数据库到文件,或者做Data transfer同步的时候,就会出现“1728-Cannot load from mysql.proc. The table is probaly corrupted.”的错误,如下图(忘记截图了,随便网上找了一张):

解决办法如下:

SSH登录到服务器,输入如下命令:

mysql_upgrade -uroot -p密码

Done. 问题解决!

网上查了一下,造成的原因是数据库升级到5.5版本之后,proc表中的comment字段类型已经从原来的char(64)改为了text类型,所以需要运行mysql_update命令升级一下之前现有的数据库结构。

OK. Have fun !!! ???

MySQL数据库的只读模式设置

在MySQL数据库中,在设置主从关系以及数据迁移时,都需要设置数据库的读写状态为“只读”状态,可以通过下面的方式来设置“只读”与“读写”模式。

设置数据库状态为“只读”:

mysql > set global read_only=1;

设置数据库状态为“读写”:

mysql > set global read_only=0;

查询数据库读写状态:

mysql > show global variables like "%read_only%";
+------------------+-------+  
| Variable_name    | Value |  
+------------------+-------+  
| read_only        | ON    |  
+------------------+-------+

 

MySQL 查询一分类所有的子分类

CREATE FUNCTION `getChildLst`(rootId INT)
RETURNS varchar(1000)
BEGIN
	DECLARE sTemp VARCHAR(1000);
	DECLARE sTempChd VARCHAR(1000);
	SET sTemp = '$';
	SET sTempChd =cast(rootId as CHAR);
	WHILE sTempChd is not null DO
		SET sTemp = concat(sTemp,',',sTempChd);
		SELECT group_concat(cid) INTO sTempChd FROM zz_category where FIND_IN_SET(pid,sTempChd)>0;
	END WHILE;
	RETURN sTemp;
END

有可能会遇到 This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary 的问题,只需要在MySQL中执行如下命令就可以了:

set global log_bin_trust_function_creators=TRUE;

查询的SQL语句:

select getChildLst(133) cids;

结果:

+---------------------------+
| cids                      |
+---------------------------+
| $,133,137,141,142,143,144 |
+---------------------------+

 

CentOS 6.5下通过源码安装 MySQL Server

通过源码安装 MySQL Server 安装步骤如下:

1、卸载旧版本 MySQL

查看是否有旧版本 MySQL:

rpm -qa | grep mysql

如果有的话,通过下面命令来卸载旧版本:

rpm -e mysql   //普通删除模式
rpm -e --nodeps mysql    // 强力删除模式,如果使用上面命令删除时,提示有依赖的其它文件,则用该命令可以对其进行强力删除

2、安装 MySQL

通过 yum 安装编译需要的包 阅读更多

遇到的MySQL乱码解决一例

最近做一小项目,PDO连接数据库,在开发环境上一切正常,上线部署时,一进入生产环境,就发现从数据库中查看数据,为UTF-8编码。从phpMyAdmin中查看也可正常显示汉字。可一从项目页面中查看汉字数据,就变为问号,有多少个汉字,就出现多少个问号。

网上查了一大天,也试了许多种方法,都无法解决这个问题。

直到突然灵机一现,会不会是PDO建立请求时发送的字符编码没有生效。

PDO连接数据库的DSN串如下:

mysql:host=127.0.0.1;port=3306;dbname=weixin_vote;charset=utf8

测试环境PHP版本为5.4.4,生产环境PHP版本为5.3.3(由5.2.17升级,由于旧系统包袱,未跨大版本升级)。

在5.3.3版本的PDO中,DSN串中的charset部分是不生效的。而在5.4.4中,则一切正常。

发现问题就好办了,在代码中增加兼容部分:

$db->query('set names utf8');

OK,问题搞定~!

在MySQL中查詢庫或者表是否存在

在MySQL中,我們可以通過以下兩條SQL語句來查詢一個庫或是一個表是否存在:

查詢庫是否存在:

select `TABLE_NAME` from `INFORMATION_SCHEMA`.`TABLES` where `TABLE_SCHEMA`='your_database_name'

查詢表是否存在:

select `TABLE_NAME` from `INFORMATION_SCHEMA`.`TABLES` where `TABLE_SCHEMA`='your_database_name' and `TABLE_NAME`='your_table_name'

修改语言引起的mongodb无法启动

昨晚在测试系统上修改了系统语言,通过修改 /etc/default/local 文件实现的,将其中的 zh_CN 全部改为了 en_US。

结果今天在启动mongodb时发现mongodb无法启动,删了 mongod.lock 文件也是如此,报错如下:

ERROR: child process failed, exited with error number 100

无意中将语言修改回 zh_CN 后,再次启动mongodb服务,居然起来了。

哪位能解释一下这是为什么呢。。。