http://www.toutiao.com/a6348218076932538625/?tt_from=mobile_qq&utm_campaign=client_share&app=explore_article&utm_source=mobile_qq&iid=5840657922&utm_medium=toutiao_ios
Mysql 双机热备 设置策略
UI视频教程 2016-11-02 12:15:08
可以替换的配置变量
Master:219.245.87.10
slave的授权账号:backup
slave的授权账号密码:[email protected]
master的同步数据库:lian
---------------------------------------------------------------------------------------------------------------
/etc/init.d/iptalbes start 开启命令
/etc/init.d/iptables restart 重启命令
1.修改my.cnf
(1)在[mysqld]后加入:
server-id=1
#同步事件的日志记录文件,最好不要写参数,默认为 log-bin=MySQL-bin.000001
log-bin=
#提供数据同步服务的数据库,多个用逗号分开。在slave 端配置即可
binlog-do-db=lian
#要忽略的数据库
binlog-ignore-db=mysql
(2)屏蔽下面的设置,打开远程连接
#bind-address = 127.0.0.1
2.可以导出要同步的数据库给slave初始化用.
2.1 适用于两个已存在的数据库
mysqldump [OPTIONS] database [tables]
mysqldump -u root -p backup_db > backup_db.txt;//导出backup_db库
恢复时使用:
mysql>create database backup_db;
mysql>use backup_db;
mysql>source /var/www/db.txt //win下可能需要<符号
mysqldump -u root -p --all-database > db.txt //导出全部
mysqldump -u root -p --databases DB1 DB2 DB2_table1 >db.txt
2.2 适用于slave为新的数据库
适合于新建数据库的情况,特别适合于 master 与 slave 在 my.cnf 已经设置好 replication 关系 (但未指定 database 同步数据库 ) 的情况: 这就是使用 mysql 的 sql 语句 load table from master 与 load data from master;
load table from master 可以从 master 数据库把表结构复制到 slave 数据库中,这样可以建立同步的表。
load data from master 是从 master 数据库把数据导入到 slave 数据表中,条件是 master 从一开始安装运行就使用了 bin-log 参数而保存有二进制日志
3.给slave建立的授权登录帐号
mysql>GRANT REPLICATION SLAVE,REPLICATION CLIENT,RELOAD,SUPER ON *.* TO [email protected] IDENTIFIED BY '[email protected]';
mysql> flush privileges;
mysql> select user,host from user;
+——–+——————+
| user | host |
+——–+——————+
| root | 127.0.0.1 |
| backup | 192.168.254.2 |
| | localhost |
| root | localhost |
| | nod1.test.domain |
| root | nod1.test.domain |
+——–+——————+
6 rows in set (0.01 sec)
(为强安全选项,权限少。mysql>GRANT REPLICATION SLAVE ON *.* TO [email protected] IDENTIFIED BY '[email protected]';)
注意:backup,1234为slave的登录帐号
4.重启mysql,
mysql>show master status /G
*************************** 1. row ***************************
File: mysql-bin.000001
Position: 98
Binlog_Do_DB: lian
Binlog_Ignore_DB: mysql
1 row in set (0.00 sec)
Slave:10.10.10.22
slave做更新的数据库:lian
---------------------------------------------------------------------------------------------------------------
1.修改my.cnf
(1)在[mysqld]后加入:
server-id=2 # 如果有多个 slave 就改为不重复的 id 就好,在mysql 4.1 中,这个已经取消了
master-host=10.10.10.22
master-user=backup #同步用户帐号
[email protected]
master-port=3306
master-connect-retry=60 #预设重试间隔60秒
replicate-do-db=lian # 告诉slave只做 test 数据库的更新
bin-log =
(2)可选;双向备份时必须!屏蔽下面的设置,打开远程连接,
#bind-address = 127.0.0.1
2.导入目标数据库
2.1 恢复时使用:
mysql>create database backup_db;
mysql>use backup_db;
mysql>source /var/www/db.txt //win下可能需要<符号
2.2 适用于slave为新的数据库
适合于新建数据库的情况,特别适合于 master 与 slave 在 my.cnf 已经设置好 replication 关系 (但未指定 database 同步数据库 ) 的情况: 这就是使用 mysql 的 sql 语句 load table from master 与 load data from master;
load table from master 可以从 master 数据库把表结构复制到 slave 数据库中,这样可以建立同步的表。
load data from master 是从 master 数据库把数据导入到 slave 数据表中,条件是 master 从一开始安装运行就使用了 bin-log 参数而保存有二进制日志
3.重启mysql
mysql>slave start;
mysql>show slave status /G
=============确保===============
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
##############################################################################################################
1. master 与 slave 有相同的初始数据记录,保证同步操作开始后两者数据一致
2. master 必须使用 bin-log 二进制日志记录 ( 推荐 slave 也使用 bin-log )
3.当有错误产生时检查slave的data目录下*.err日志文件。此时同步的线程退出
4.如果你用 Linux / unix 操作系统,那一定要注意一下防火墙 firewall
有没有限制 mysql 远程访问,如果是,最好是打开远程访问端口,并作好访问 ip 限制
5. slave 是从 master 的 bin-log 是读取 sql 记录来同步,所以,从哪一条 log 开始读取很重要
这样即执行了手工同步
6.程序可能在slave上进行了写操作
7.也可能是slave机器重起后,事务回滚造成的.
手工同步方法
----------
1.首先停掉Slave服务:slave stop
2.到主服务器上查看主机状态:
记录File和Position对应的值。
mysql> show master status /G
File: log-test.000003
Position: 98
3.到slave服务器上执行手动同步:
mysql>change master to
master_host='202.117.113.138',
master_user='backup',
master_password='1234',
master_port=3306,
master_log_file='log-test.000003',
master_log_pos=98;
4.开启slave服务并测试:
mysql> slave start;
1 row in set (0.00 sec)
再次查看slave状态发现:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...
Seconds_Behind_Master: 0