mysqldump at replica master
Tuesday, March 11th, 2014 Posted in MySQL | No Comments »一直以来,数据库备份就是我最头痛的问题,特别是从库完全挂掉的时候,以前总是人把所有的程序完全停止,现在好了,终算让我看到这个参数了 [crayon-5c6fe41fd5525321762120/] [crayon-5c6fe41fd552d255565497/] 在备份全过程中锁住所有的表,默认不启用。当启用时会自动关闭--single-transaction和--lock-tables参数。 [crayon-5c6fe41fd552f612729271/] 当值为0时,什么也不做。当值为1时,在SQL中自动加上CHANGE MASTER命令,当值为2时自动加上CHANGE MASTER命令,但是被注释的,导入时并不会自动执行。启用这个参数时如果没有启用--single-transaction,就会自动启用--lock-all-tables,当然了--lock-tables永远都是关闭的。 [crayon-5c6fe41fd5532081905754/]
php script to monitor OTRS queue size from SNMP
Tuesday, February 18th, 2014 Posted in Linux, MySQL, PHP & PW | No Comments »最近公司上线OTRS,感觉还不错,顾问居然还给了数据库的结构图,闲下来就写了这个php脚本给Opsview用来监控OTRS支持队列的大小。别问我为什么用php...因为我实在是不会pel.... 测试环境: [crayon-5c6fe41fd5a77021526137/] 废话不说,先帖脚本: [crayon-5c6fe41fd5a7d584711718/] 脚本本身没什么好看的,不过最开始用来传参的东西还是蛮好玩的,这种脚本不能跟在web里面一直的传参,只能通过这个叫$argv的数组。 把脚本保存为/usr/local/bin/check_otrs_queue 修改/etc/snmp/snmpd.conf,加上下面几行 [crayon-5c6fe41fd5a83352225891/] 最后就是使用check_snmp_exec.sh检测了~~~
Error: /usr/bin/mysqlcheck doesn’t support multiple contradicting commands.
Wednesday, February 12th, 2014 Posted in MySQL, troubleshooting | No Comments »MySQL 5.5对比MySQL 5.0和5.1改变还真不少,就连我以前常用的修复表命令到了5.5时代居然都不能用了。。。 [crayon-5c6fe41fd5d91602239064/] 一运行就给我报: [crayon-5c6fe41fd5d97346347871/] 而且这个错误在Google里面都好像没有太多的答案,最好在一个阿拉伯文的论坛里面找到了解决方案:其实只要去掉--check就好了 [crayon-5c6fe41fd5d9a245355042/]
mysqldump迁移编码不同的数据库
Sunday, December 26th, 2010 Posted in Linux, MySQL | No Comments »来源:http://hi.baidu.com/seaweaver/blog/item/fbd9a8ec933c532562d09f5c.html 第一步,导出旧库 mysqldump --default-character-set latin1 -uroot -pXXX --database db > /tmp/old.sql 第二步,转换编码 iconv -t utf-8 -f gb2312 -c /tmp/old.sql > /tmp/new.sql 第三步,导入新库 修改new.sql,增加一条sql语句: "SET NAMES utf8;",保存。 mysql -hlocalhost -uroot db < new.sql 这次进行论坛迁移时,这个小blog居然一再出现乱码,实在是让小可我实在是汗顏。 进行深入分析时,发现dump出来的文件里面就已经是乱码了。用file进行分析时,发现文件已经是UTF8。 最后仔细想想新旧服务器之间的区别,可能只有mysql server字符集的区别。老服务器用的是默认的latin1,而新服务器我们改成了utf8。 在笔记本的ubuntu上装了个mysql,把sql文件导入,select了一下,发现数据居然是正常了的。 这样子问题就很明显了,马上在笔记本上执行 mysqldump --default-character-set=latin1 -uroot -p123456 myhnet > myhnet.sql 再用cat看了一个myhnet.sql的内容,里面的中文已经是正常了。 用vi打开文件,把里面所有的latin1替换成utf8,上传到服务器,再导入,果然一切正常了~~~~
mysql的FILE权限
Tuesday, December 21st, 2010 Posted in MySQL, troubleshooting | No Comments »前天晚上把MySQL的系统数据库给重装/升级了一下,结果昨天就出了问题了 昨天整整花了两个小时调试了两个小问题,第一个是procedure的问题,第二个就是这个FILE权限的问题。 第一个问题由于前面有function与trigger的经验,很快就定位解决了。 第二个问题由于以前没有经验,弄了好久才定位到这位一段SQL上面,当然了,他原来的SQL可比这个长多了。 SELECT * INTO OUTFILE 'data.txt' FIELDS TERMINATED BY ',' FROM table2; 原来要让MySQL向系统里面写文件必须要给一个FILE权限。而这个权限是一个全局权限,我们在用下面这个语句进行授权时根本就不能把这个权限授给用户。 grant ALL on db.* to user@'host' identified by 'password'; 必须要单独进行授权: grant FILE on *.* to user@'host' identified by 'password';
ubuntu下进行MySQL的移植
Thursday, December 9th, 2010 Posted in Linux, MySQL | No Comments »最近一直很忙,忙着加班进行服务器升级。 服务器全部升到了Ubuntu 1004 LTS,但是在进行mysql移植的时候碰到了个大问题,直接到原来的数据文件同步过来,mysql却无论如果也启动不了。 最后那边的老大告诉我说,是AppArmor的问题,让哥关掉这个什么AppArmor,果然,数据库就起来了。 简单查了一个,这个AppArmor应该是跟SELinux差不多的东西,但级别好像并没有SELinux那么高,直接停用服务就没用了。相关资料:https://wiki.ubuntu.com/AppArmor 另外还有两个问题: 1, socket文件的如果不能写入,数据库也是起不来的,所以,还要关注一下你指定的socket文件的位置的权限 2, 从5.0升级到5.1有很多麻烦,建议最好是做逻辑备份而不是做直接物理升级 好像直接升级也有问题,等待进一步的更新。
linux下mysql配置文件my.cnf详解[转]
Thursday, July 22nd, 2010 Posted in Linux, MySQL | No Comments »mysqld程序:目录和文件 basedir = path使用给定目录作为根目录(安装目录)。 character-sets-dir = path给出存放着字符集的目录。 datadir = path从给定目录读取数据库文件。 pid-file = filename为mysqld程序指定一个存放进程ID的文件(仅适用于UNIX/Linux系统); Init-V脚本需要使用这个文件里的进程ID结束mysqld进程。 socket = filename为MySQL客户程序与服务器之间的本地通信指定一个套接字文件(仅适用于UNIX/Linux系统; 默认设置一般是/var/lib/mysql/mysql.sock文件)。在Windows环境下,如果MySQL客户与服务器是通过命名管道进行通信 的,--sock选项给出的将是该命名管道的名字(默认设置是MySQL)。 lower_case_table_name = 1/0新目录和数据表的名字是否只允许使用小写字母; 这个选项在Windows环境下的默认设置是1(只允许使用小写字母)。 mysqld程序:语言设置 character-sets-server = name新数据库或数据表的默认字符集。为了与MySQL的早期版本保持兼容,这个字符集也可以用--default-character-set选项给出; 但这个选项已经显得有点过时了。 collation-server = name新数据库或数据表的默认排序方式。 lanuage = name用指定的语言显示出错信息。 mysqld程序:通信、网络、信息安全 enable-named-pipes允许Windows 2000/XP环境下的客户和服务器使用命名管道(named pipe)进行通信。这个命名管道的默认名字是MySQL,但可以用--socket选项来改变。 local-infile [=0]允许/禁止使用LOAD DATA LOCAL语句来处理本地文件。 myisam-recover [=opt1, opt2, ...]在启动时自动修复所有受损的MyISAM数据表。这个选项的可取值有4种:DEFAULT、BACKUP、QUICK和FORCE; 它们与myisamchk程序的同名选项作用相同。 old-passwords使用MySQL 3.23和4.0版本中的老算法来加密mysql数据库里的密码(默认使用MySQL 4.1版本开始引入的新加密算法)。 port = n为MySQL程序指定一个TCP/IP通信端口(通常是3306端口)。 safe-user-create只有在mysql.user数据库表上拥有INSERT权限的用户才能使用GRANT命令; 这是一种双保险机制(此用户还必须具备GRANT权限才能执行GRANT命令)。 shared-memory允许使用内存(shared memory)进行通信(仅适用于Windows)。 shared-memory-base-name = ...
mysql从库上出现的奇怪错误
Monday, June 15th, 2009 Posted in Linux, MySQL, troubleshooting | 1 Comment »今天监控脚本发现从库突然停了,又报了以下错误: [crayon-5c6fe41fd5f5f019856787/] 很奇怪的错误,后来一问,原来是DBA在更新库的时候用了自己的帐号,而在从库上没有给他设置相应的帐号,这才导致从库同步失败,建立一个拥有相同权限的用户,然后重启一下slave就可以了
MySQL提示“too many connections”的解决办法
Saturday, January 3rd, 2009 Posted in Linux, MySQL, troubleshooting | No Comments »今天生产服务器上的MySQL出现了一个不算太陌生的错误“Too many connections”。平常碰到这个问题,我基本上是修改/etc/my.cnf的max_connections参数,然后重启数据库。但 是生产服务器上数据库又不能随便重启。 没办法,只好想办法手动去释放一些没用的连接。 登陆到MySQL的提示符下,数据show processlist这个命令,可以得到所以连接到这个服务器上的MySQL连接: [crayon-5c6fe41fd62fc809646020/] 然后,你可以看到像上面这样的MySQL数据连接列表,而且每一个都会有一个进程ID号(在上表的第一列)。我们只要输入这样的命令: [crayon-5c6fe41fd6304019562115/] 其中1180421为你在进程列表里找到并且要杀掉的进程号。
mysqld_multi—-管理多实例数据库
Wednesday, December 31st, 2008 Posted in Linux, MySQL | No Comments »mysqld_multi是用来管理在同一台机器上监听着不同的端口和不同的socket连接的多个mysqld进程。它可以用来启动或者停止这些服务,也可以报告他们当前的状态。 要使用这个服务,我们首先得建立一个多实例对象的配置文件,格式如下: [mysqld_multi] mysqld = /usr/bin/mysqld_safe mysqladmin = /usr/bin/mysqladmin user = root [mysqld1] socket = /tmp/mysql.sock1 port = 3307 pid-file = /var/lib/mysql1/hostname.pid1 datadir = /var/lib/mysql1 log = /var/lib/mysql1/log-file.log log-error = /var/lib/mysql1/log-error.err [mysqld2] socket = /tmp/mysql.sock2 port = 3308 pid-file = /var/lib/mysql2/hostname.pid2 datadir = /var/lib/mysql2 log = /var/lib/mysql2/log-file.log log-error = /var/lib/mysql2/log-error.err 跟普通的配置文件相比,这里首先多了一个[mysqld_multi]的配置 这个里面要配置的参数一般就是四个参数 mysqld与mysqladmin,填写你的mysqld_safe与mysqladmin的全路径就可以了。 user与password,管理帐号的用户名写密码,也就是说你需要在所有的实例中设置一个相同的用户名(密码也要相同)。 然后就是[mysqldN],N可以是任意整数,但是不能重复,代表的是实例ID(官方叫GNR) 这里面的参数就跟普通配置文件[mysqld]一样了。 我不多说了。 启动与停止指定的实例 mysqld_multi --config-file=/etc/my_multi.cnf start 1,2 mysqld_multi stop 1,2 这里的1,2就是我们前面写的N(GNR) 一般在启动的时候,我们需要指定配置文件,停止的时候不要 报告实例的状态: mysql_multi report 1,2