1. mysql 的一些参数
# -e 这个参数是告诉mysql执行"-e" 后面的某个命令,而不连接到server # 此参数在写一些基本的mysql检查和监控的脚本中非常有用 mysql -uroot -proot -e'show databases' # --tee 将mysql输入和输出内容记录到文件里。便于大数据量的查询 mysql -uroot -proot --tee = /tmp/query.log # --prompt 在mysql提示符中显示登录的主机,用户名,当前的数据库,很有用 mysql -uroot -proot --prompt = "\u@\h:\d >"
另外,也可以配置my.cnf,将prompt写入[mysql]分组里,这样就不用每次手动了
[mysql] prompt="\u@\h:\d >"
2. mysqladmin 的一些参数
-status #检测mysql基本状态 mysqladmin -uroot -proot -hlocalhost status Uptime: 240 Threads: 1 Questions: 90 Slow queries: 5 Opens: 23 Flush tables: 1 Open tables: 17 Queries per second avg: 0.375 -ping #检测mysql是否正常 mysqladmin -uroot -proot -hlocalhost ping mysqld is alive -processlist #当前mysql的连接线程信息 mysqladmin -uroot -proot -hlocalhost processlist -------------------------------------------------------------------------- | Id | User | Host | db | Command | Time | State | Info | -------------------------------------------------------------------------- | 8 | root | localhost | | Query | 0 | | show processlist | --------------------------------------------------------------------------
3. mysqldump 常用参数
#-d (--no-data) 仅生成结构创建的语句,没有数据 mysqldump -uroot -proot test -d > /tmp/log.log #-l (--lock-all-tables) dump的时候锁表,保持数据一致性 mysqldump -uroot -proot test --lock-all-tables > /tmp/log.log #指定字符集。这点比较重要,防止生成不可用内容。 mysqldump -uroot -proot test --default-character-set=utf8 > /tmp/log.log
4. MySQL主从架构tips
- 强烈建议ntpdate二台服务器的时间,不然来个未来(future)时间就麻烦了
- 由于MySQL数据库走的都是内网,所以二台机器的iptables可以关闭,在配置过程中由于没关iptables发生了错误,直接导致admin在slave数据库上连不上主数据库
- 主MySQL的binlog功能一定要打开,我们的线上服务器有次由于PHP程序误操作,发生了改单错误,幸亏用binlog恢复过来了;但开启此功能要注意binlog的大小,有次Nagios狂报警,binlog日志都快1T了
- 平时多检查MySQL的备份文件,尤其要关注其真实大小及时间;如果有条件,建议多用备份的数据库文件在其余机器做下恢复实验,跟真实的运行的数据库比对,看有无区别
- 数据库的主从切换是比较危险的操作,尤其是电子商务的跑单业务,很容易丢失数据,这种操作不到万不得已不推荐执行
5. shell脚本分析mysql
使用shell脚本做日志分析,然后将分析结果直接存储到mysql中,除了用perl连接Mysql外,还可以:
将每一步需要执行的语句保存到 tmp.sql 中,最后在使用
mysql -u uname -p pwd < tmp.sql
6. mysql备份数据脚本
#! /bin/bash MysqlPATH="/data/app/mysql" BackupPATH="/data/mysql_bak" nowYear=`date +%Y` nowMonth=`date +%m` nowDay=`date +%d` nowHour=`date +%H` for DatabaseName in `$MysqlPATH/bin/mysqlshow | sed '1,3d; $d' | awk '{print $2}'`; do echo "start backup database: "$DatabaseName; $MysqlPATH/bin/mysqldump --single-transaction --skip-opt $DatabaseName | gzip > $BackupPATH/$DatabaseName"_"$nowYear$nowMonth$nowDay.gz done