Tag: mysql

  • 关于 mysql2 gem 和 MariaDB

    MariaDB 可以被看作是 MySQL 的增强版, 在绝大多数情况下用 MariaDB 替代 MySQL 都能取得不错的效果. 只是一些接口程序依旧把 MariaDB 当作 MySQL (这也没什么错吧), 例如安装 mysql2 gem 的时候, 我不得不如此才能把这个 gem 正常安装: sudo apt-get install libmariadb-client-lgpl-dev libmariadb-client-lgpl-dev-compat gem install mysql2 -v ‘0.3.14’ — –with-mysql-include=/usr/include/mariadb/ 🙂

  • 利用 bash 命令做 SQL 数据修补

    如果是把一个 DB 或者一个 table 从一个服务器送到另一个, 那么使用 mysqldump 命令就可以了. 但有的时候, 需要的数据可能只是若干条记录, 就不能用 mysqldump 了. 奇怪的是我 google 了一番居然也没找到很方便的方法. 求人不如求自己吧, 下面是用 bash 命令的解决方法: mysql <database> -uroot -e “select * from <table> where <condition>…” |tail -n +2 |sed -e ‘s/^/(“/g’ -e ‘s/$/”)/g’ -e ‘s/\t/”,”/g’ |while read values; do echo “insert into <table> values $values”; done 然后把输出的 SQL 在目标服务器上运行即可. 记得把<…

  • 利用 LVM 在线抓取 MySQL 数据库快照

    续 小试分身 MySQL Replication, 上次是按照 MySQL 教程做的, 比较死板(或者说, 安全), 但需要锁住数据库, 也就是说, 用户一端的感觉就是服务器出问题了… 而如果通知用户服务器要下线一段时间的话, 又会引起不明真相的用户的莫名猜疑. 那么就需要一种在几秒中之内完成生成镜像的操作, 于是我就想到了 LVM snapshot. Google 了一番, 我看到已经有成功先例了, 步骤如下: 1, 确认 MySQL 的数据区(缺省 /var/lib/mysql) 是在 LVM 上, 假设是 /dev/VOLUME_GROUP/data 2, 开一个 MySQL session, 执行并记录 show master status 的输出: flush tables with read lock; show master status; 3, 在另一个 terminal 执行: lvcreate -s…

  • 用 MariaDB 替换 MySQL

    自从 MySQL 被邪恶的 Oracle 收购后, 貌似就到了后娘手里, 基本没什么发展. 不过还好, 原创班子已另起炉灶, 在 MySQL 5.5 的基础上做出很多改良, 发布了 MariaDB 5.5. 另外一个好消息就是终于看到了国人在开源圈子里的贡献: MariaDB 10.x 分支就包含了来自淘宝的两处贡献: https://mariadb.com/kb/en/what-is-mariadb-100/ <–在这页上找 taobao 即可. 希望这样的案例越来越多吧. 免费使用开源软件, 在事业成功之后回馈开源社区, 这是个良性循环. 目前我试用了 MariaDB 5.5, 是 MySQL 5.5 的完美替代品. 安装方法在此: https://downloads.mariadb.org/mariadb/repositories/#mirror=aarnet_pty_ltd&distro=Debian&distro_release=squeeze&version=5.5 另外如果用 Ruby 的 mysql2 gem 的话, 需要安装 libmariadbclient-dev(debian/ubuntu). 而如果 innotop 这个小工具不灵的话, 很可能需要安装 libterm-readkey-perl. 🙂  

  • 小试分身 MySQL Replication

    打理数据库服务器, 再怎么优化终究会面临一台再强的服务器也不够用的时候. 那就使用多台服务器做 Replication 吧. 先从2台 MySQL 服务器开始, 一台为主, 另一台为从. 基本的步骤是(装系统/装软件/配置网络连接什么的就略过了… 1, 在主服务器的配置(/etc/mysql/my.cnf)里添加 [mysqld] log-bin=/var/log/mysql/mysql-bin.log server-id=1 然后重新启动 mysql 服务. 2, 在从服务器的配置里添加 [mysqld] server-id=2 然后重新启动. 3, 在主服务器上添加 replication 专用用户, 例如 repl create user ‘repl’@’%.<domain.name>’ identified by ‘<pass>’ ; grant replication slave on *.* to ‘repl’@’%.<domain.name>’ ; flush privileges ; 4, 锁定主数据库, 记录 bin-log 指针位置并导出数据 flush tables…

  • 笔记: Xen VM 里面的 MySQL 服务器优化

    我一直都对公司 Xen VM 的数据库服务器不满, 因为实在是太慢了. 但是几百个 GB 的商业数据我可不敢动, 于是先在测试服务器上证实一下我的想法. 测试环境是: Dom0: Debian 6 Xen Hypervisor 64-bit, Xen 4.0 DomU: Debian 6  64-bit MySQL server 5.1, innodb_file_per_table, pool=1GB, log=256MB 硬盘就是普通的 SATA 7200RPM, VM 用的是 LVM 分区 然后我用之前写的一个小程序做批量更新, 32K 记录. 缺省配置下, 运行时长达到24分钟, 而优化后则只需要27秒. 差不多60倍?? 我都有点不敢相信了. 下面是对应的配置和测试数据. 每次更改配置后都会重启 MySQL, 因此不大可能是缓存在起作用. Updating 32606 records (client table), InnoDB table, autocommit=true,…

  • 让Mysql server接受远程访问

    一直以来,由于我没做过什么大网站,或者说没把任何网站做大 -_-b 总之我用的LAMP都在一个box里。那么如果把数据库服务隔离出来单独做一个box,该怎么办呢? 首先,修改mysql的配置文件(以mysql 5.0为例): $ sudo vim /etc/mysql/my.cnf 找到 bind-address            = 127.0.0.1 将127.0.0.1替换为服务器的外部IP,然后存盘退出。 为了避免缓慢的远程连接,还必须在[mysqld]段加上: skip-name-resolve 下一步是在mysql中为远程用户开启权限: mysql>GRANT ALL ON your-database.* TO ‘your-user’@’client-name or IP’ [IDENTIFIED BY ‘yourpass’]; mysql>FLUSH PRIVILEDGES; 下一步,要确认firewall为mysql连接让路。以ufw为例: $ sudo ufw allow 3306 这样简单的开放了3306端口,但没有做任何限制。差不多了吧,从client一端可以测试一下了: $ mysql -h mysql-server -u your-user  [-p] 🙂

  • LAMP服务器的简单备份方法

    我用CentOS作为网站服务器的OS,我是这样备份我的网站的。 以下简称网站服务器为C,我的电脑是A。首先,在C上用一段shell script备份网站: backup.sh #! /bin/bash # This script is to backup the website files and db mysqldump mydb -pmypass >/var/www/mysite/mydump.sql datestamp=`date +%Y%m%d` filewww=”/home/myuser/backup/mysite_””$datestamp””.zip” zip -r $filewww /var/www/mysite 然后可以先运行一下这个script,看看结果是否符合预期。如果没问题,就可以将其加入到crontab了,每天自动运行。 59 3 * * * /bin/bash /home/myuser/backup.sh 这样C这边每天凌晨会备份一次并生成一个zip压缩包。但是把C的备份留在C就没意义了,我还要定期的把zip从C传到A。由于A不像C那样不间断运行的,所以如果从C向A传输就需要测试A是否在线,麻烦。不如让A取C上的zip。这就涉及到另一个问题,身份验证。 为一段自动运行的script提供password,我觉得不如使用public key验证来得专业,而且简单,两步就搞定: ssh-keygen -t rsa ssh-copy-id -i .ssh/id_rsa.pub myuser@C 这期间问到private key password时直接回车就行了;myuser@C的password还是需要输入的(否则……)。 下一步就是在A上写script,获取C上的备份,成功获取后删除C上的备份,并将A本机上超过一个月的备份删除。 backup-mysite.sh #!/bin/bash #by Raymond, Jun,…