1.实现读写分离,减轻主库负载mysql
2.数据安全,作备份恢复sql
3.主从切换作高可用数据库
基于语句的复制:在主服务器上执行的SQL语句,在从服务器上执行一样的语句,有可能会因为SQL执行上下文环境不一样而是数据不一致。安全
基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执行一遍。从mysql5.0开始支持,可以严格保证数据彻底一致,但此时用mysqlbinlog
去分析日志就没啥意义。由于任何一条update语句,都会把涉及到的行数据所有set值,因此binlog文件会比较大。bash
混合类型的复制:默认采用基于语句的复制,一旦发现基于语句的没法精确的复制时,就会采用基于行的复制。服务器
主从版本一致—>主库受权复制账号—>确保开启binlog及主从server_id惟一—>xtrabackup恢复到从库—>记录xtrabackup_binlog_info中binlog名称及偏移量—>从库change master to —>slave start—>检查两个yesapp
建立负责复制的帐号:工具
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_ali'@'192.168.5.%' IDENTIFIED BY 'slave_ali_pass'; mysql> FLUSH PRIVILEGES;
赋予备份用户权限:大数据
mysql> CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY 'bkppass'; mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT,PROCESS,SUPER ON *.* TO 'bkpuser'@'localhost'; mysql> FLUSH PRIVILEGES;
假设 MySQL 安装目录在/opt/mysql
,my.cnf配置文件/opt/mysql/my.cnf
,端口3306,数据目录/opt/mysql_data
,sock位于/opt/mysql_data/mysql.sock
。备份数据放在/data/backup/mysql/
。spa
全量备份:
$ export BKP_PASS="bkppass" $ innobackupex --defaults-file=/opt/mysql/my.cnf --host=localhost --port=3306 --user=bkpuser --password=${BKP_PASS} /data/backup/mysql
默认会以当天 日期+时间 戳命名备份目录。如2018-09-04_20-00-00
全量恢复:
innobackupex --use-memory=16G --apply-log 2018-09-04_20-00-00
确认数据库是关闭的,而且datadir,目录下为空 $ innobackupex --defaults-file=/opt/mysql/my.cnf --use-memory=16G --copy-back 2018-09-04_20-00-00 |
chown -R mysql.mysql /opt/mysql_data
/opt/mysql/bin/mysqld_safe --defaults-file=/opt/mysql/my.cnf &
$ mysql -uslave_ali -p'slave_ali_pass' -S /opt/mysql_data/mysql.sock mysql> change master to master_host=MASTER_HOST, master_port=3306, master_user='slave_ali',master_password='slave_ali_pass', master_log_file='mysql-bin.000135', master_log_pos=262484673;
mysql> show slave status\G mysql> start slave; mysql> show slave status\G