mysql 完全备份

1,启用二进制日志,并于数据库分离,单独存放

 vim /etc/my.cnf
log_bin=/data/bin/mysql-bin
chown mysql.mysql /data/bin
mysqldump -A --single-transaction --master-data=2 | xz > /data/all.sql.xz
 INSERT hellodb.students(stuid,name,gender,age) VALUE(27,'Lujunyi','M',30);
 systemctl stop mariadb.service
unxz /data/all.sql.xz 
vim /data/all.sql   HANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=468
mysqlbinlog --start-position=468 /data/bin/mysql-bin.000001 > /data/inc.sql
mysql -e 'source /data/all.sql'mysql -e 'source /data/inc.sql'

误删除的恢复

1,启用二进制日志并与数据库分开存放

vim /etc/my.cnf
 log_bin=/data/bin/mysql-bin
 chown mysql.mysql /data/bin
mysqldump -A --single-transaction --master-data=2 | xz > /data/all.sql.xz
mysql -e "drop table hellodb.students"  mysql -e "insert hellodb.teachers value (5,'wangqi',50,'M')"
 systemctl stop mariadb.service
rm -rf /var/lib/mysql/*
unxz /data/all.sql.xz
 vim /data/all.sql   -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=521902;
mysqlbinlog --start-position=521902 /data/bin/mysql-bin.000004 >/data/inc.sql
 vim /data/inc.sql  DROP TABLE `hellodb`.`students` /* generated by server */
systemctl start mariadb.service
mysql -e "SET sql_log_bin=off"
 mysql </data/all.sql  mysql </data/inc.sql 

主从复制

# 主服务器

1,主服务器启用二进制日志,并更改二进制目录

 vim /etc/my.cnf  log_bin=/data/bin/mysql-bin  binlog-format=row  server-id=1(主从服务器必需保证不同)

2,重启服务

service mysql restart
mysql -e 'GRANT REPLICATION SLAVE ON *.* TO "repluser"@"172.22.7.%" IDENTIFIED BY "centos"
 show master logs;  +------------------+-----------+  | Log_name   | File_size |  +------------------+-----------+  | mysql-bin.000001 |  14383 |  +------------------+-----------+  1 row in set (0.00 sec)

5,更配置

 vim /etc/my.cnf  server-id=2  read-only  #log-bin=/data/bin/mysql-bin
service mysql restart
 MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='172.22.7.70', MASTER_USER='repluser',  MASTER_PASSWORD='centos',  MASTER_PORT=3306,  MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=14383;
show slave status\G;
start slave;

10,增删改主服务器数据,查看从服务器数据是否同步。

主从复制出错的解决-sql_slave_skip_counter

#master服务 ip=172.22.7.70

1,主服务器启用二进制日志,并更改二进制目录

 vim /etc/my.cnf  log_bin=/data/bin/mysql-bin  binlog-format=row  server-id=1(主从服务器必需保证不同)

2,重启服务

service mysql restart
mysql -e 'GRANT REPLICATION SLAVE ON *.* TO "repluser"@"172.22.7.%" IDENTIFIED BY "centos"
 mysql -e 'show master logs;'  +------------------+-----------+  | Log_name   | File_size |  +------------------+-----------+  | mysql-bin.000001 |  264 |  | mysql-bin.000002 |  245 |  +------------------+-----------+

5,修改配置文件,启动服务

 vim /etc/my.cnf  [mysqld]  server-id = 2  read-only systemctl start mariadb

6,配置,change master to

 CHANGE MASTER TO  MASTER_HOST='172.22.7.77',  MASTER_USER='wang',   MASTER_PASSWORD='lodman', MASTER_PORT=3306,  MASTER_LOG_FILE=log-bin.001',  MASTER_LOG_POS=4,  MASTER_CONNECT_RETRY=10;
 mysql -e 'show slave status\G'  Slave_IO_State:     Master_Host: 172.22.7.77    Master_User: wang    Master_Port: 3306   Connect_Retry: 10   Master_Log_File: log-bin.001  Read_Master_Log_Pos: 4   Relay_Log_File: ct7m1-relay-bin.000001   Relay_Log_Pos: 4 Relay_Master_Log_File: log-bin.001   Slave_IO_Running: No  Slave_SQL_Running: No       ·········略
mysql -e 'start slave'
 mysql -e 'show slave status\G'  Slave_IO_State:     Master_Host: 172.22.7.77    Master_User: wang    Master_Port: 3306   Connect_Retry: 10   Master_Log_File: log-bin.001  Read_Master_Log_Pos: 4   Relay_Log_File: ct7m1-relay-bin.000001   Relay_Log_Pos: 4 Relay_Master_Log_File: log-bin.001   Slave_IO_Running: Connecting  Slave_SQL_Running: Yes       ·········略

11,查看slave服务是否同步,失败!

#解决错误

12,停止并重置slave复制线程服务

 mysql -e 'stop slave' mysql -e 'reset slave'
 CHANGE MASTER TO MASTER_HOST='172.22.7.70', MASTER_USER='repluser', MASTER_PASSWORD='centos', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=245;
show slave status\G;   Slave_IO_State: Waiting for master to send event    Master_Host: 172.22.7.70    Master_User: repluser    Master_Port: 3306   Connect_Retry: 10   Master_Log_File: mysql-bin.000002  Read_Master_Log_Pos: 7382   Relay_Log_File: ct7m1-relay-bin.000002   Relay_Log_Pos: 540 Relay_Master_Log_File: mysql-bin.000002   Slave_IO_Running: Yes  Slave_SQL_Running: No
 MariaDB [(none)]> stop slave;Query OK, 0 rows affected (0.00 sec)MariaDB [(none)]> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;Query OK, 0 rows affected (0.00 sec)MariaDB [(none)]> start slave;Query OK, 0 rows affected (0.03 sec)MariaDB [(none)]> show slave status\G;*************************** 1. row ***************************   Slave_IO_State: Waiting for master to send event    Master_Host: 172.22.7.70    Master_User: repluser    Master_Port: 3306    Connect_Retry: 10   Master_Log_File: mysql-bin.000002  Read_Master_Log_Pos: 7382   Relay_Log_File: ct7m1-relay-bin.000003    Relay_Log_Pos: 540  Relay_Master_Log_File: mysql-bin.000002   Slave_IO_Running: Yes   Slave_SQL_Running: Yes        ·········略

17,同步完成。

Mysql 级联复制

在生产换进中有一种主从复制的方法主节点先将数据同步到一个中间的从节点,然后由从节点给后续的其他从节点来复制数据,这种复制方式称为级联复制。

级联复制的好处是可以极大的减轻主节点的压力

级联复制在配置时需要在中间节点上启用log_slave_updates的选项。

#环境 服务器 master   slave   slave 系统 centos7   centos7   centos7 ip  172.22.7.70  172.22.7.70  172.22.7.71

1,主服务器启用二进制日志,并更改二进制目录

 vim /etc/my.cnf  log_bin=/data/bin/mysql-bin  binlog-format=row  server-id=1(主从服务器必需保证不同)

2,重启服务

service mysql restart
mysql -e 'GRANT REPLICATION SLAVE ON *.* TO "repluser"@"172.22.7.%" IDENTIFIED BY "centos"
 mysql -e 'show master logs;'  +------------------+-----------+  | Log_name   | File_size |  +------------------+-----------+  | mysql-bin.000001 |  264 |  | mysql-bin.000002 |  7488 |  | mysql-bin.000003 |  402 |  +------------------+-----------+ #slave
 vim /etc/my.cnf  [mysqld]  log-bin=/data/bin/mysql-bin  binlog-format=row  read-only  log_slave_updates  server-id=2

6,启动服务

 systemctl restart mariadb
 CHANGE MASTER TO MASTER_HOST='172.22.7.70',MASTER_USER='repluser',MASTER_PASSWORD='centos',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=402;
 mysql -e 'start slave'
 show slave status\G; *************************** 1. row ***************************   Slave_IO_State: Waiting for master to send event    Master_Host: 172.22.7.70    Master_User: repluser    Master_Port: 3306   Connect_Retry: 60   Master_Log_File: mysql-bin.000003  Read_Master_Log_Pos: 7539   Relay_Log_File: ct7m1-relay-bin.000002   Relay_Log_Pos: 7677 Relay_Master_Log_File: mysql-bin.000003   Slave_IO_Running: Yes  Slave_SQL_Running: Yes   Replicate_Do_DB:

#slave1

11,在slave上将slave上的数据拷贝过来

 mysqldump -A --single-transaction -F --master-data=1 > /data/all.sql scp /data/all.sql 172.22.7.72:/data
 mysql -e 'GRANT REPLICATION SLAVE ON *.* TO "repluser"@"172.22.7.%" IDENTIFIED BY "centos"
 vim /etc/my.cnf  [mysqld]  read-only  server-id=3
 systemctl start mariadb
 mysql -e 'show master logs'  +------------------+-----------+  | Log_name   | File_size |  +------------------+-----------+  | mysql-bin.000001 |  351 |  | mysql-bin.000002 |  351 |  | mysql-bin.000003 |  351 |  | mysql-bin.000004 |  25552 |  | mysql-bin.000005 |  586 |  +------------------+-----------+
 CHANGE MASTER TO MASTER_HOST='172.22.7.71',MASTER_USER='repluser',MASTER  _PASSWORD='centos',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000005',  MASTER_LOG_POS=586;  
mysql < /data/all.sql
 mysql -e "START SLAVE;"
mysql -e "show slave status\G;"

21,同步完成。

MySQL半同步

异步复制是当用户写入一条记录时,先将数据写入到主节点,然后回复用户一个写入成功的消息,然后慢慢的将数据复制到其背后的其他从节点,这样的好处是效率比较高,但是缺点也是非常明显,主服务器和从服务器的延迟过大并且主服务器突然发生异常,此时就会造成数据的丢失。

同步复制是当用户写入一条记录时,主节点将数据写入数据库,然后将数据复制给其后面的其他从节点,当所有的从节点返回数据复制成功后,主节点再回复用户数据接入成功的消息,这样做的好处是,确保了数据的安全性,但损失了效率。

半同步复制是间于同步复制和异步复制之间的一种复制方法,他的工作原理是:当用户执行写操作时,主节点会将数据发送给其后面的其他从节点,只要有一个从节点返回复制成功的消息,主节点就直接返回写入成功,如果主节点背后的从节点迟迟不返回复制成功消息,此时就会有一个超时时长,一旦达到超时时长,主节点就先返回消息告诉用户复制成功,而后将数据继续给从节点复制。

#配置主从复制 步骤见上。

#配置半同步

##master

1,修改配置文件启用插件

 vim /etc/my.cnf  [mysqld]  log-bin=/data/bin/mariadb-bin  binlog-format=row  server-id=1  rpl_semi_sync_master_enabled 
 systemctl restart mariadb
 SHOW GLOBAL VARIABLES LIKE '%semi%';  +------------------------------------+-------+  | Variable_name      | Value |  +------------------------------------+-------+  | rpl_semi_sync_master_enabled  | ON |  | rpl_semi_sync_master_timeout  | 3000 |  | rpl_semi_sync_master_trace_level | 32 |  | rpl_semi_sync_master_wait_no_slave | ON |  +------------------------------------+-------+  4 rows in set (0.00 sec)
 SET GLOBAL rpl_semi_sync_master_timeout=3000; Query OK, 0 rows affected (0.00 sec)

5,修改配置文件启用插件

 vim /etc/my.cnf  [mysqld]  log-bin=/data/bin/mariadb-bin  binlog-format=row  server-id=2  rpl_semi_sync_master_enabled
systemctl restart mariadb
 SHOW GLOBAL VARIABLES LIKE '%semi%';  +------------------------------------+--------------+  | Variable_name      | Value  |  +------------------------------------+--------------+  | rpl_semi_sync_master_enabled  | ON   |  | rpl_semi_sync_master_timeout  | 1000   |  | rpl_semi_sync_master_trace_level | 32   |  | rpl_semi_sync_master_wait_no_slave | ON   |  | rpl_semi_sync_master_wait_point | AFTER_COMMIT |  +------------------------------------+--------------+  5 rows in set (0.00 sec)
mysql -e "START SLAVE";

10,同步完成

更多相关文章

  1. Android异步加载图像小结 (含线程池,缓存方法)
  2. android WebView 图片缩放功能小结
  3. Android(安卓)Camera 使用小结
  4. android fragment学习5--fragment扩展 TabLayout非自定义
  5. Android(安卓)电源系列小结s
  6. Android中自定义对话框小结
  7. Android中自定义对话框小结
  8. Android中自定义对话框小结
  9. Android中自定义对话框小结

随机推荐

  1. 在linux 列出 超级用户 普通用户和 系统
  2. Ubuntu 14.04 LTS 使用sudo免输密码
  3. 为SWIG指定Python头和库。
  4. 如何在qt上访问父窗口小部件?
  5. Linux 常用命令汇总--加了注释
  6. Scientific Linux:我需要获取一个shell脚
  7. Linux进程间通信—— 内存映射
  8. 正则表达式匹配安全的openssl和不安全的o
  9. linux实战-redis(1) -- 在centos中安装redi
  10. 小小的一句话愁了一天!