Mysql : 主从配置 & mysqldump & binlog备份 (笔记)

目录

  • 目录
  • 主从配置
    • 修改master
    • 修改slave
    • 重启两台mysql
    • 在主服务器上建立帐户并授权slave
    • 配置slave
    • 查看slave状态
    • 异常处理
  • mysqldump
  • binlog
  • 参考文章

主从配置

修改master

vi  /etc/my.cnf
[mysqld]
log-bin=mysql-bin   //[必须]启用二进制日志
server-id=11      //[必须]服务器唯一ID,默认是1,一般取IP最后一段

修改slave

  #vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin   //[不是必须]启用二进制日志
server-id=22      //[必须]服务器唯一ID,默认是1,一般取IP最后一段

重启两台mysql

service mysqld restart

在主服务器上建立帐户并授权slave

mysql>GRANT REPLICATION SLAVE ON *.* to 'slave'@'%' identified by '123456';

slave是slave服务器连接master的用户名 123456是密码

mysql>show master status;
   +------------------+----------+--------------+------------------+
   | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
   +------------------+----------+--------------+------------------+
   | mysql-bin.000001 |      5307|              |                  |
   +------------------+----------+--------------+------------------+
   1 row in set (0.00 sec)

配置slave

mysql>change master to master_host='118.212.149.12',master_user='slave',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=123;

Mysql>start slave;    //启动从服务器复制功能

查看slave状态

 mysql> show slave status\G

Mysql : 主从配置 & mysqldump & binlog备份 (笔记)_第1张图片

这两个参数必须为yes:

Slave_IO_Running: Yes    //io_thread是否running
Slave_SQL_Running: Yes  //sql_thread是否running

至此我们的主从mysql服务器就配置完成.可以创建库创建表试一试啦.

异常处理

我们配置完主从后,如果更改了从库,且主库发生的数据改变和从库刚刚更改的内容发生冲突会导致接下来的同步出现问题.同时Slave_SQL_Running: No
Mysql : 主从配置 & mysqldump & binlog备份 (笔记)_第2张图片

解决思路:跳过slave上的1个错误
在slave上执行如下命令:

mysql>stop slave;
mysql>set  global sql_slave_skip_counter=1;
mysql>start slave;

mysqldump

mysqldump为我们提供了数据备份的功能,比如我们每晚0点全量备份整个数据库,可以通过linux定时任务脚本完成.

备份命令:

mysqldump -u root -p --databases 数据库1 数据库2 > xxx.sql

常见选项:

--all-databases, -A: 备份所有数据库
--databases, -B: 用于备份多个数据库,如果没有该选项,mysqldump把第一个名字参数作为数据库名,后面的作为表名。使用该选项,mysqldum把每个名字都当作为数据库名。

--force, -f:即使发现sql错误,仍然继续备份
--host=host_name, -h host_name:备份主机名,默认为localhost
--no-data, -d:只导出表结构
--password[=password], -p[password]:密码
--port=port_num, -P port_num:制定TCP/IP连接时的端口号
--quick, -q:快速导出
--tables:覆盖 --databases or -B选项,后面所跟参数被视作表名
--user=user_name, -u user_name:用户名
--xml, -X:导出为xml文件

-B:指定数据库
-F:刷新日志
-R:备份存储过程等
-x:锁表

示例:

1.备份全部数据库的数据和结构
mysqldump -uroot -p123456 -A >F:\all.sql
2.备份全部数据库的结构(加 -d 参数)
mysqldump -uroot -p123456 -A-d>F:\all_struct.sql
3.备份全部数据库的数据(加 -t 参数)
mysqldump -uroot -p123456 -A-t>F:\all_data.sql
4.备份单个数据库的数据和结构(,数据库名mydb)
mysqldump -uroot-p123456 mydb>F:\mydb.sql
5.备份单个数据库的结构
mysqldump -uroot -p123456 mydb-d>F:\mydb.sql
6.备份单个数据库的数据
mysqldump -uroot -p123456 mydb-t>F:\mydb.sql
7.备份多个表的数据和结构(数据,结构的单独备份方法与上同)
mysqldump -uroot -p123456 mydb t1 t2>f:\multables.sql
8.一次备份多个数据库
mysqldump -uroot -p123456 --databases db1 db2>f:\muldbs.sql

还原分为两种方式:(1)mysql命令行source方法 和 (2)系统命令行方法

1.还原全部数据库:
(1) mysql命令行:mysql>source f:\all.sql
(2) 系统命令行: mysql -uroot -p123456 <f:\all.sql
2.还原单个数据库(需指定数据库)
(1) mysql>use mydb
mysql>source f:\mydb.sql
(2) mysql -uroot -p123456 mydb <f:\mydb.sql
3.还原单个数据库的多个表(需指定数据库)
(1) mysql>use mydb
mysql>source f:\multables.sql
(2) mysql -uroot -p123456 mydb<f:\multables.sql
4.还原多个数据库,(一个备份文件里有多个数据库的备份,此时不需要指定数据库)
(1) mysql命令行:mysql>source f:\muldbs.sql
(2) 系统命令行: mysql -uroot -p123456<f:\muldbs.sql

binlog

上边提到的主从配置也是基于binlog的
我们也可以通过binlog手动恢复数据库,回复命令:

mysqlbinlog mysql-bin.0000xx | mysql -u用户名 -p密码 数据库名

常用参数:

--start-position=875 起始pos点
--stop-position=954 结束pos点
--start-datetime="2016-9-25 22:01:08" 起始时间点
--stop-datetime="2019-9-25 22:09:46" 结束时间点
--database=zyyshop 指定只恢复zyyshop数据库(一台主机上往往有多个数据库,只限本地log日志)

-u --user=name 连接到远程主机的用户名
-p --password[=name] 连接到远程主机的密码
-h --host=name 从远程主机上获取binlog日志
--read-from-remote-server 从某个MySQL服务器上读取binlog日志
flush logs; 刷新binlog文件
reset master; 清除所有binlog文件

参考文章

Mysql之binlog日志说明及利用binlog日志恢复数据操作记录:https://www.cnblogs.com/kevingrace/p/5907254.html
centos 下mysqldump备份多个数据库命令:http://blog.csdn.net/leadway123/article/details/13293075
mysql主从复制(超简单):http://blog.51cto.com/369369/790921
set global sql_slave_skip_counter=1:http://blog.csdn.net/lwei_998/article/details/41349459
【MySQL】Got fatal error 1236原因和解决方法 :http://blog.itpub.net/22664653/viewspace-1714269/

你可能感兴趣的:(Mysql)