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 `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
#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
- 可以根据查询到的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
- 下载完成即可直接安装。
- ~ ]# 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/备份的目标目录,一般该目录事先存在
- 备份结果如下:
- 备份结果以时间戳为目录存放。如下图所示。
#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;
- 为从库提供主库二进制日志指向。
- 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
来源: