sql优化
- Insert使用批量
- 查询不要使用*, MySQ需要先查出表里的所有字段,再进行匹配
- 字符串的查询条件要带引号,否则可能不走索引
备份及恢复
-
备份
mysqldump -uroot -ppasswd -B dbname > filename.sql
note: -B备份指定库,使用-B备份文件中多了两行代码(create database dbname; use dbname;)
-A是备份所有的库 -
指定字符集备份
mysqldump -uroot -ppasswd -B -default-character-set=utf8 dbname > mysql.bak.sql
-
使用压缩命令备份
mysqldump -uroot -ppasswd --default-character-set=utf8 dbname|gzip > mysql.bak.sql.zip
-
备份多个库
mysqldump -uroot -ppasswd -B dbname1 dbname2..|gzip > mysql.bak.sql.zip
-
备份多个表
mysqldump -uroot -ppasswd dbname tablename1 tablename2.. > mysql.bak.sql
-
恢复
mysqldump -uroot -ppasswd dbname < filename.sql
-
mysqldump关键参数
- -B 指定多个库,增加建库语句和use语句
- --compact去掉注释,适合调试输出,生产不用
- -A备份所有库
- -F刷新binlog日志
- --master-data 增加binlog日志文件及对应的位置点
- -x, --lock-all-tables
- -d 只备份表结构
- -t 只备份数据
mysqlbinlog
-
开启binlog
修改mysqld文件中的log-bin=日志文件名,binlog日志会根据自己的规则自动轮询
binlog只记录增删改的操作日志,不记录查询的操作日志,此日志通常用来恢复数据用 -
使用binlog日志恢复数据
-
首先将binlog日志到处为sql文件
mysqlbinlog -d dbname binlogname > bin.sql
note: binlog文件只能用mysqlbinlog命令打开查看
-d: 只导出数据内容 -
将sql文件导入数据库
mysql -uroot -ppasswd dbname < bin.sql
-
-
刷新切割日志
mysqladmin -uroot -ppasswd flush-log
命令使用范围
-
在mysql内部操作外部命令
system + 外部命令
-
在mysql外部执行mysql内部命令
mysql -uroot -ppasswd -e "sql命令"
字符集乱码问题
mysql字符集乱码问题主要是因为系统字符集、客户端字符集、mysql字符集不统一造成的
-
客户端字符集修改
临时改变显示字符集:set names utf-8
永久:更改my.cng客户端模块的参数 -
服务端字符集修改
更改my.cnf参数
[mysql]
default-character-set=utf8 适合5.1及之前版本
default-set-server=utf8 适合5.5版本
-
linux系统字符集修改
修改linux的字符集:vi /etc/sysconfig/i18n
是修改的文件生效:source /etc/sysconfig/i18n
或者. /etc/sysconfig/i18n
-
查看字符集
mysql -uroot -ppasswd -e "show variables like 'character_set%'
显示内容为:
-
修改已经中文乱码的数据库表
- 建库及建表语句到处,修改为utf8
- 到处所有的mysql数据
- 修改mysql服务端和客户端编码为utf8
- 删除原有的库表及数据
- 导入新的建库及建表语句
- 导入mysql所有数据
MySQL主从同步
-
文件同步
- NFS网络文件共享同步存储数据
- samba共享数据
- 定时任务或守护进程结合rsync, scp
- inotify(scrsync) + rsync触发式实时数据同步
- ftp数据同步
- ssh key + scp/rsync
-
mysql主从同步四种方案
- 主从方式,通过同步binlog最大限度保持数据一致,但也有风险
- 双写, 写的压力大
- 谷歌半同步插件,异步改为半同步