1、mysql主从跳过一个报错的事务

#停止slave进程
stop slave;
#跳过一个事务
set global sql_slave_skip_counter=1;
#启动slave进程
start slave;

2、回收权限

#回收超级权限
revoke grant option on *.*(库.表) from admin(用户名称);
#回收权限,只保留读权限
UPDATE `mysql`.`user` SET `Host`='%', `User`='admin', `Password`='123456', `Select_priv`='Y', `Insert_priv`='N', `Update_priv`='N', `Delete_priv`='N', `Create_priv`='N', `Drop_priv`='N', `Reload_priv`='N', `Shutdown_priv`='N', `Process_priv`='N', `File_priv`='N', `Grant_priv`='N', `References_priv`='N', `Index_priv`='N', `Alter_priv`='N', `Show_db_priv`='N', `Super_priv`='N', `Create_tmp_table_priv`='N', `Lock_tables_priv`='N', `Execute_priv`='N', `Repl_slave_priv`='N', `Repl_client_priv`='N', `Create_view_priv`='N', `Show_view_priv`='N', `Create_routine_priv`='N', `Alter_routine_priv`='N', `Create_user_priv`='N', `Event_priv`='N', `Trigger_priv`='N', `Create_tablespace_priv`='N', `ssl_type`='', `ssl_cipher`='', `x509_issuer`='', `x509_subject`='', `max_questions`='0', `max_updates`='0', `max_connections`='0', `max_user_connections`='0', `plugin`='mysql_native_password', `authentication_string`='', `password_expired`='N' WHERE (`Host`='%') AND (`User`='admin');

3、mysql主从复制问题的一次解决方案

#1、查看主从复制状态

mysql>show slave status\G

wKiom1iYHe6inHrBAAIJ0tqODBo124.jpg-wh_50

#2、使用xtrabackup进行备份和恢复

  xtrabackup是percona公司出的一个备份工具,支持在线热备,备份时不影响数据读写。提供了两个工具,xtrabackup和innobackupex。
  其中xtrabackup只能备份innodb和xtradb两种数据表,而不能备份MyISAM数据表。而innobackupex则封装了xtrabackup,能同时备份处理innodb和myisam,不过在备份myisam的时候需要加全局读锁。

#2.1、安装步骤

  安装xtrabackup需要在主从服务器上都进行安装,同时在主从服务器上安装的软件版本需一致才可以。

#2.1.1、配置epel源  

~]# cat /etc/yum.repos.d/myepel.repo
[myepel]
name=zheda
baseurl=http://mirrors.zju.edu.cn/epel/6/x86_64/
gpgcheck=0
enabled=1

#2.1.2、安装方式

1、下载percona的yum源进行安装。
~]# yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
查询对应的percona yum源提供的rpm包。
~]#yum list | grep percona

wKioL1iYH1TC88MHAAApI9LELNA174.png-wh_50

可以根据查询到的xtrabackup的版本,选择一个进行安装。此处安装2.2版本的。
~]# yum install percona-xtrabackup-22 –y
即可完成安装过程。
2、下载rpm包进行安装。
需要事先配置epel源。使用wget命令可以直接下载rpm包。此处下载的为2.4版本的。
~ ]# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.5/binary/redhat/6/x86_64/percona-xtrabackup-24-2.4.5-1.el6.x86_64.rpm

wKiom1iYIGSgExC4AAAZfhxo5j0798.png-wh_50

下载完成即可直接安装。
~ ]# yum install percona-xtrabackup-24-2.4.5-1.el6.x86_64.rpm –y
安装完成即可使用。

#2.2、备份主库数据

#设置主库全局只读
mysql>set global read_only=1;
#开始备份
~ ]#innobackupex --defaults-file=/etc/my.cnf --parallel=4 /tmp/mysqlback/ >/dev/null 2>&1
备份参数解析:
    --defaults-file=/etc/my.cnf指明备份时mysql配置文件位置
    --parallel=4开启多少线程进行备份
    /tmp/mysqlback/备份的目标目录,一般该目录事先存在
备份结果如下:
    备份结果以时间戳为目录存放。如下图所示。

wKiom1iYI9XTDQTJAAAXy8Wu3Dc168.png-wh_50

#2.3、将备份的数据上传至从库服务器

copy已经备份完成的数据到从库服务器上。
~]# cd /tmp/mysqlback && scp -r 2017-01-14_00-14-11 10.74.244.33:/tmp/mysqlback/

#2.4、在从库服务器进行恢复

停止mysql从库服务。
  ~]# service mysqld stop
删除之前数据库数据目录下的数据。
  ~]# cd /data/mysqldata && rm –rf *
提交备份之前未完成的事务。
  ~]# cd /tmp/mysqlback && innobackupex --apply-log 2017-01-14_00-14-11
将备份数据恢复至从库的数据目录。
  ~]# cd /tmp/mysqlback && innobackupex --copy-back 2017-01-14_00-14-11
修改从库mysql数据目录的权限。
  ~]# cd /data && chown -R mysql:mysql mysqldata
在从库服务器上启动mysql数据库。
  ~]# service mysqld start
------------------------以上操作在从库上执行------------------------------------

在主库上创建具有复制权限的账户。
mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repluser'@'从库ip地址'IDENTIFIED BY 'replpass';
  解析:
    从库的ip地址,也可以通过通配符来指定某一ip段。
在主库上查看当前二进制日志所在位置。
  mysql>show master status;

wKioL1iYJNLDEKkUAAAb-mUXkpE561.png-wh_50

为从库提供主库二进制日志指向。
  mysql>CHANGE MASTER TO MASTER_HOST='主库ip地址', MASTER_USER='repluser',MASTER_PASSWORD='replpass', MASTER_LOG_FILE='master-bin.000021',MASTER_LOG_POS=58469965;
  解析:
    mysql主库的ip地址
    repluser    具有复制权限的账号
    replpass      具有复制权限的密码
在从库上执行查看当前复制进程是否启动。在刚恢复从库的时候,复制进程是未启动的。
在从库上启动复制进程。
  mysql> start slave;
取消主库的全局只读。
  mysql>set global read_only=0;


4、mysql数据库备份

#将数据库备份至一个文件中
mysql -e "show databases;" -u(用户名) -p -h(数据库ip地址) | grep -Ev "Database|information_schema|test|performance_schema(去除这些库不进行备份)" | xargs mysqldump -u(用户名) -p -h(数据库ip地址) --databases > mysql_dump_tencent.sql


#将数据库单独进行备份
for i in `mysql -h(数据库ip地址) -u(用户名) -p(密码) -e "show databases;" | grep -v ^+ | egrep -v '(information_schema|performance_schema|test|mysql|Database)'`;do
        /usr/bin/mysqldump -h(数据库ip地址) -u(用户名) -p(密码) -q --database ${i} > /tmp/backup/${i}.sql
        if [ $? == 0 ];then
                echo "Backup omc_trunk ${date_time} $i database OK" >> /tmp/backup/backup.log
        else
                echo "Backup omc_trunk ${date_time} $i database error" >> /tmp/backup/backup.log
        fi
done
#将备份的目录进行压缩
cd /tmp/ && /bin/tar zcvf backup.tar.gz backup