参考http://dev.mysql.com/doc/refman/5.6/en/installing-source-distribution.html。
- 安装前配置
groupadd mysql useradd -r -g mysql mysql yum install cmake
- 安装
tar zxvf mysql-VERSION.tar.gz
cd mysql-VERSION
cmake .
make
make install - 安装后配置
cd /usr/local/mysql chown -R mysql . chgrp -R mysql . # df -ha 用于查看各个分区的使用率,在处理之前确保有足够存储空间 bin/mysql_install_db --datadir=/var/lib/mysql --user=mysql chown -R root . chown -R mysql data bin/mysqld_safe --user=mysql & mysqladmin -u root -h host_name password newpassword # 启动服务 /usr/local/mysql/bin/mysqld_safe --user=mysql &; # my.cnf在/etc目录下
- 设置用户
#创建一个新用户,host可以用%替换,表示从任意ip地址登陆
CREATE USER ‘username‘@’host’ IDENTIFIED BY ‘password’;
#查看用户信息
SELECT user, host, password FROM user WHERE user=’username’;
#分配权限,primitive包括select, insert, update, delete, create, drop, index, alter, grant, reference, reload, shutdown, process, file共14个权限
GRANT primitive1, primitive2, …, primitiven ON db.table TO username@host IDENTIFIED BY password
#删除用户
DROP USER username;
#取消用户授权
REVOKE primitive ON db.table FROM username@host;
- 备份
下面的命令里都省略了-u和-p,在实际操作时须补全。
关于bin log的部分,文档《binlog基本认识》有非常详尽的介绍。开启binlog
编辑my.cnf文件,在[mysqld]区块中加入log-bin=mysql-bin,重启服务即生效
执行show variables like ‘log_%’;来确认已经打开bin log
常用的bin log操作
show master logs; # 查看所有bin log日志列表
show master status; # 查看最新一个bin log日志编号名称,以及最后一个操作事件结束点
flush logs; # 刷新日志,产生一个新的bin log日志文件
reset master; # 清空所有bin log日志
查看bin log
mysqlbinlog mysql-bin.000013 #打开一个bin log文件
show binlog events [IN log_name] [FROM pos] [LIMIT [offset,] row_count]
例如指定查询 mysql-bin.000021 这个文件,从pos点:8224开始查起,偏移2行,查询10条
show binlog events in ‘mysql-bin.000021’ from 8224 limit 2,10\G;
利用bin log恢复数据
mysqlbinlog mysql-bin.0000xx | mysql
备份整个数据库,备份前需要获取全局读锁,因此必须在traffic较低的时候进行
mysqldump –single-transaction –all-databases > backup_yy_mm_dd_hh_mm_ss.sql
mysql < backup_yy_mm_dd_hh_mm_ss.sql
- 主从同步
完整的说明在这里:http://dev.mysql.com/doc/refman/5.6/en/replication-howto.html。
另一篇文章是个不错的简化版,并且更加实用“Setting up MySQL replication without the downtime”。
## 设置主服务器 # 确保master已经通过log-bin来开启bin log # 确保每个host对应的server-id是不同的 [mysqld] log-bin=mysql-bin server-id=1 innodb_flush_log_at_trx_commit=1 sync_binlog=1 # 为slave创建专门的用户名 create user 'repl'@'%.mydomain.com' identified by 'slavepass'; grant replication slave on *.* to 'repl'@'%.mydomain.com'; ## 设置从服务器 # 确保slave的server-id与其它服务器不同 [mysqld] server-id=2 ## 获取master的同步位置 # 执行flush操作,开启一个client session,执行下面语句后保持不退出 flush tables with read lock; # 在另一个client session执行,记录File、Position对应的值 show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003 | 73 | test | manual,mysql | +------------------+----------+--------------+------------------+ # 回到锁住的session执行 unlock tables; ## 创建master的镜像 mysqldump --all-database --master-data > dbdump.db # 如果需要选择性同步,需要在slave上配置--replicate-ignore-db=db_name来完成,详细使用方法参考官方文档 ## 在slave导入镜像 #带--skip-slave-start选项启动slave上的mysql #导入dump文件 mysql < dbdump.db #在slave执行change master to指令 CHANGE MASTER TO MASTER_HOST='master_host_name', MASTER_USER='replication_user_name', MASTER_PASSWORD='replication_password', MASTER_LOG_FILE='recorded_log_file_name', MASTER_LOG_POS=recorded_log_position; start slave;
- 配置实例
注意:配置MySQL的目的不是有什么秘诀,关键在于根据系统本身的配置高低和处理的业务类型来调整各种资源配置- 这里有根据不同业务量级给出的实例,https://github.com/onddo/mysql_tuning-cookbook。
- 可以从这里出发,按照步骤来配置https://tools.percona.com/wizard
- 执行一下这个工具来获得优化建议https://github.com/major/MySQLTuner-perl