vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin //[必须]启用二进制日志
server-id=11 //[必须]服务器唯一ID,默认是1,一般取IP最后一段
#vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin //[不是必须]启用二进制日志
server-id=22 //[必须]服务器唯一ID,默认是1,一般取IP最后一段
service mysqld restart
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)
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; //启动从服务器复制功能
mysql> show slave status\G
这两个参数必须为yes:
Slave_IO_Running: Yes //io_thread是否running
Slave_SQL_Running: Yes //sql_thread是否running
至此我们的主从mysql服务器就配置完成.可以创建库创建表试一试啦.
我们配置完主从后,如果更改了从库,且主库发生的数据改变和从库刚刚更改的内容发生冲突会导致接下来的同步出现问题.同时Slave_SQL_Running: No
解决思路:跳过slave上的1个错误
在slave上执行如下命令:
mysql>stop slave;
mysql>set global sql_slave_skip_counter=1;
mysql>start slave;
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手动恢复数据库,回复命令:
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/