MySQL安装部署

参考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

    ## 设置主服务器
    # 确保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;