Tag: mysql

  • mysql主从同步快速设置

    记录一个比较简便的mysql的主从同步设置步骤,方便日后使用。 安装环境 centos 5.4 mysql 5.1.xx 采用rpm直接安装 xtrabackup 1.2.22 采用rpm直接安装 1. Master:/etc/my.cnf [mysqld] server-id = 1 log-bin innodb_flush_log_at_trx_commit=1 sync_binlog=1 datadir=/var/lib/mysql character-set-server=utf8 init_connect=’SET NAMES utf8′ 设定了默认字符集为utf8,可以按实际情况取舍这段配置。 2. Slave:/etc/my.cnf [mysqld] server-id=2 datadir=/var/lib/mysql character-set-server=utf8 init_connect=’SET NAMES utf8′ 3. Master:在master数据库设置用来同步的slave用户权限 GRANT REPLICATION SLAVE ON *.* TO ‘<slave_username>’@'<slave_ip>’ IDENTIFIED BY ‘<slave_password>’; 4. Master:导出数据到slave 采用xtrabackup来备份mysql,好处是在master的锁表时间很短,在实际的生产环境也可以使用,并且xtrabackup会自动记录同步日志文件的位置。 sudo innobackupex-1.5.1 –stream=tar /tmp/ | ssh […]

  • mysql的partition与auto_increment

    mysql 5.1之后,开始新增了partition功能,可以做到对代码透明的情况下进行数据分区。但是从实际使用中来看,限制颇多: 如果用来分区的字段和主键不是同一个,则不能分区 见很早前的一篇译文mysql 5.1新功能 -- 按日期分区,如果查询条件中没有正确利用到分区的字段,那么partition的效果为零 mysql 5.1.31之前的partition功能有较大的bug,会导致自增字段不能正常自增,怎么个不正常法?auto_increment值会非正常增长,突然比当前的最大id小很多,插入数据时导致duplicate key错误。 这些问题都能凑合着对付过去,但是partition功能和auto_increment似乎是天生的敌人。从使用习惯上来说,我们会把auto_increment字段设置为主键,这个字段要是unique的才比较稳妥,这个情况下如果希望用其它字段来进行分区的话,几乎就成了不可能的任务。以这张表为例: CREATE TABLE user ( id int auto_increment PRIMARY KEY, uid int, foo varchar(32) ) engine=myisam; 这个时候试图以uid进行分区会怎么样?是以怎样的惨淡结局收场?变通的办法是对自增字段做一些调整,从mysql的手册来看,自增字段不一定要设置成主键,仅仅是普通的index也可以,那么把表结构换成下面这个样子,就可以分区成功。 CREATE TABLE user ( id int auto_increment, uid int, foo varchar(32), index (id) ) engine=innodb PARTITION BY HASH (uid) PARTITIONS 4; 我在实际环境中有一张表达到了几亿条数据,如果要用时下流行的sharding策略,必须在代码上做一些改动,当时偷了点懒直接使用partition功能,用了大半年倒也相安无事。只是分区表占用内存相当的大,如果有其它的表经常出现慢查询耗费服务器资源,那么雪崩效应就出现了,所有的查询都会堵塞变得非常慢。

  • 在centos 5.2下安装最新的mysql proxy

    mysql proxy的代码树已经迁移到lauchpad,采用bazaar进行版本管理。参考了一些文档,在centos 5.2下编译安装最新mysql proxy成功。步骤记录如下(在centos 5下应该也适用): 首先让EPEL (Extra Packages for Enterprise Linux) repository 生效 # rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-2.noarch.rpm 确定这些包已经安装:GNU Autotools, flex, pkg-config, bazaar, MySQL client libraries # yum install autoconf automake libtool flex pkgconfig bzr mysql-devel centos下自带的libevent版本超老,这个没有别的办法,只能自己重新编译,版本需要在1.4.0以上,越高越好 $ wget http://monkey.org/~provos/libevent-1.4.9-stable.tar.gz $ tar zvfx libevent-1.4.9-stable.tar.gz $ cd libevent-1.4.9-stable $ ./configure $ make # make install centos自带的glib版本也比较老,mysql proxy […]

  • 用mysql触发器自动更新memcache

    mysql 5.1支持触发器以及自定义函数接口(UDF)的特性,如果配合libmemcache以及Memcached Functions for MySQL,就能够实现memcache的自动更新。简单记录一下安装测试步骤。 安装步骤 安装memcached,这个步骤很简单,随处可见 安装mysql server 5.1RC,安装办法也很大众,不废话了 编译libmemcached,解压后安装即可 ./configure; make; make install 编译Memcached Functions for MySQL,在http://download.tangent.org/找一个最新的版本下载就是, ./configure –with-mysql=/usr/local/mysql/bin/mysql_config –libdir=/usr/local/mysql/lib/mysql/ make make install 接下来有两个办法让Memcached Functions for MySQL在mysql中生效 在mysql的shell中执行memcached_functions_mysql源码目录下的sql/install_functions.sql,这会把memcache function作为UDF加入mysql 运行memcached_functions_mysql源码目录下的utils/install.pl,这是一个perl脚本,作用同上一条 测试memcache function 以下测试脚本摘自memcached_functions_mysql的源码目录,有兴趣可以试试 drop table if exists urls; create table urls ( id int(3) not null, url varchar(64) not null default ”, primary […]

  • 在命令行里执行mysql的sql

    平常执行sql,需要登录到mysql的shell下,然后再执行。比如: $ /usr/bin/mysql -u root mysql> select * from users; 但是如果写一点简单的脚本,也可以在命令行下直接运行sql并显示结果,比如: $ cat executemysql.sh #!/bin/sh qry=$1; echo “Executing the following query” echo “$qry” mysql -u root

  • wordpress迁移

    前一阵服务器出了些小问题,因此不得不将现有的wordpress做一备份迁移。好在迁移之后还算幸运,整个过程比较顺利,因此现在系统又开始跑起来了。你可能会觉得迁移不是什么太麻烦的事情,不过对于一个几年没挪过窝,东西又烂又多,数据库打包都有8m,虚拟主机权限很少的人来说,这可是一档子大事情。 mysql 4 to mysql 4.1 首先面对的问题,是虚拟主机上的数据库又生了,4.0跳到4.1,老江湖都知道,mysql 4.1新增了字符集,一个没弄好就是页面乱码伺候。 另外一个问题,是前面提过的,原来的数据库用phpmyadmin打包出来,有8M,再用phpmyadmin导入是不用指望,在没有shell权限的情况下,要把这个数据导进去也挺麻烦。 最后用个意想不到的办法,就轻易解决了上面俩问题 —— 我们知道,大容量的mysql数据的导入导出,还是命令行导出方便,虽然说我没有虚拟主机的shell权限,但是php本身还是有办法调用shell的(感谢主机提供者,没有开启安全模式),按照这个思路,我首先将sql上传到服务器,然后用一行php脚本就完成了数据的导入: <?php `mysql -uroot -pxxxxxx dbname < db.sql`?> 导入mysql之后的字符集是latin,和以前一致,程序不用做修改就可以投入使用了。 上一次迁移:plog 2 wordpress

  • 命令行下简单做到mysql的数据导入导出

    在命令行下mysql的数据导出有个粉好用的工具mysqldump,,它的参数有一大把,可以这样查看: mysqldump 我最常用的: mysqldump -uroot databasefoo table1 table2 > foo.sql 这样就可以将数据库databasefoo的表table1,table2以sql形式导入foo.sql中,其中-uroot参数表示访问数据库的用户名是root,如果有密码还需要加上-p参数 mysql的数据导入也是相当便捷的,如: mysql -uroot databasefoo < foo.sql 这样就可以将foo.sql的数据全部导入数据库databasefoo