本篇文章主要介绍了"mysql主从复制-mysql5.6配置主从复制",主要涉及到方面的内容,对于MySql感兴趣的同学可以参考一下:
1 简介2 ********************编辑中*****************345678910master主机上: 开启二进制日志,建立主...
1 简介
2 ********************编辑中*****************
3
4
5
6
7
8
9
10
master主机上:
开启二进制日志,建立主机唯一server ID。
在主机上开启二进制日志是因为它是master向slave复制变化数据的基础。
对一个复制组里的主机建立唯一server ID是为了将一组内的数据库服务器区分开来,server ID的取值范围为1至2^32-1之间任意值。
配置binlog及server ID时需要关闭mysql服务器,编辑my.cnf或my.ini文件,在[mysqld]选项下添加log-bin及server-id选项,例如:
[mysqld]
log-bin=mysql-bin
server-id=1
更改完后重启mysql服务器。
注意事项:
1 如果我们忽略了server ID选项或明确指定其值为默认值0,master主机将拒绝来自slave从机的任何连接。
2 对于Innodb事务,为了提高数据的持久性及连续性,我们应该在my.cnf里面设置
[mysqld]
innodb_flush_log_at_trx_commit=1
sync_binlog=1
innodb_flush_log_at_trx_commit = 1:这也是Innodb 的默认设置。我们每次事务的结束都会触发Log Thread 将log buffer 中的数据
写入文件并通知文件系统同步文件。这个设置是最安全的设置,能够保证不论是MySQL Crash 还是OS Crash 或者是主机断电都不会丢失任何
已经提交的数据。
sync_binlog=n,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。
3 确保master主机上skip-networking选项是禁用的,否则master主机数据库只允许通过本地mysql.sock文件进行连接,slave从机将无
法联系到主机。
[mysqld]
#skip-networking
master主机上:
开启二进制日志不是必要操作,server ID一定要设置,my.cnf文件中server-id需要设置并且与master的server-id不能冲突,例如:
[mysqld]
#log-bin=mysql-bin
server-id=2
如果有多个从机,每个从机的server-id都不能与master主机及其它slave从机相同。
设置完后重启slave从机服务器。
注意事项:
如果我们没有指定server-id或指定server-id数字为默认值0,slave从机都不会去连接主机。
如果我们开启了从机的二进制日志,我们可以将从机的binlog用于数据备份及数据损坏恢复,也可以用于复杂的复制拓扑结构中,如当
前从机作为其它从机的主机。
创建复制用户
每个slave连接到master需要使用用户名及密码,所以master主机上需要创建用于slave访问的用户及密码。我们可以在master主机上为每个slave创建一个访问的用户名及密码,不同的slave也可以访问master的同一个用户名及密码。
使用CREATE USER创建复制用户
mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'replpsssword';
使用GRANT
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
或者直接使用一条命令代替
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'replpsssword';
获取二进制日志位置信息
如果master主机上有数据,我们同步之前,需要停止向主机上做更新操作,获取master的文件及位置信
息,然后将主机数据导出,导出数据可通过mysqldump等相关工具或者直接拷贝data目录。
获取master主机二进制文件位置需要如下两个步骤:
1 在master主机上使用mysql命令行客户端,将所有数据刷进磁盘,并阻塞所有的写入操作
mysql> FLUSH TABLES WITH READ LOCK;
注意:
执行该命令的mysql命令行客户端一旦关闭,该命令便会失效。
2 在master主机上使用mysql命令行客户端,查看binlog日志信息
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 | 318 | | | |
+------------------+----------+--------------+------------------+-------------------+
【图 show master status】
我们可以看到包括文件名,同步位置等信息。
同步前数据备份
在slave从机开始同步前,需要先将主机的备份文件导入,master主机备份有多种方式,我们介绍两种简单方式
1 使用mysqldump
[root@HA1 data]# /usr/local/mysql/bin/mysqldump --all-databases --master-data > /tmp/datadump.db
--master-data:该参数有两个值1和2,默认为1,mysqldump导出数据时,当这个参数的值为1的时
候,mysqldump出来的文件就会包括CHANGE MASTER TO这个语句,CHANGE MASTER TO后面紧接着就是file
和position的记录,在slave上导入数据时就会执行这个语句,salve就会根据指定这个文件位置从
master端复制binlog。当这个值是2的时候,chang master to也是会写到dump文件里面去的,但是这个
语句是被注释的状态。
使用该参数时,执行mysqldump前就没有必要在master主机上执行FLUSH TABLES WITH READ LOCK和SHOW MASTER STATUS等相关操作。
【图change master to】
mysqldump详细使用方法可参考我前面的文章:
http://blog.csdn.net/jesseyoung/article/details/41078947
2 使用直接拷贝data目录
如果数据量比较大,直接拷贝原始数据文件比使用mysqldump更加有效,也省去了执行insert语句更新索引的开销。
包含InnoDB表的拷贝:
1 在master主机上使用mysql命令行客户端,将所有数据刷进磁盘,并阻塞所有的写入操作
mysql> FLUSH TABLES WITH READ LOCK;
2 在另外一个shell客户端关闭master数据库
[root@HA1 data]# mysqladmin shutdown
3 拷贝并压缩数据文件
[root@HA1 data]# tar czvf /tmp/databack.tar.gz /usr/local/mysql/data
4 重启mysql master服务
不包含InnoDB表的拷贝:
1 在master主机上使用mysql命令行客户端,将所有数据刷进磁盘,并阻塞所有的写入操作
mysql> FLUSH TABLES WITH READ LOCK;
2 拷贝并压缩数据文件
[root@HA1 data]# tar czvf /tmp/databack.tar.gz /usr/local/mysql/data
3 释放读锁
mysql> UNLOCK TABLES;
设置同步复制
1 初始安装mysql设置主从复制
最简单的方式是在两台新安装的mysql主机上设置主从复制。
设置步骤如下:
1 配置master主机my.cnf文件(参考***)
2 启动mysql master服务
3 在master上设置复制用户及密码(参考***)。
4 获取master主机binlog信息(参考***)
5 在master上释放读锁
mysql> UNLOCK TABLES;
6 配置slave从机my.cnf文件(参考***)
7 启动slave mysqld服务
8 在slave从机上执行change master操作(参考后面***)
2 已有数据的mysql设置主从复制
如果master主机中已经存在数据,新加入slave从机进行同步,同步前需要从主机上拿到备份文件,
获取备份文件可使用mysqldump,xtrabackup或直接拷贝原始数据文件等。
配置的基本方法如下:
对于master的设置方法不在赘述,可参考*****
对于master数据文件的备份方法不在赘述,可参考*****
对于slave从机的操作步骤如下:
1 更新从机的配置文件(参考***)
2 将数据导入从机
2.1 使用mysqldump备份的数据导入
启动slave mysql数据库
导入从master获得的备份数据
[root@HA1 data]# mysql < datadump.db
2.2 使用直接复制原始数据文件备份的数据导入
解压从master获得的备份数据到salve的data目录
[root@HA1 data]# tar xzvf databack.tar.gz
我们可能需要设置解压出来文件的权限确保slave能够读取或更改它们。
启动slave mysql数据库
3 在slave从机上执行change master操作(参考后面***)
4 在slave从机上启动复制线程
mysql> START SLAVE;
完成上述操作之后slave便可以连接到master并同步数据了。
相关命令列表:
1
2
3
****************************************************************************************
原文地址:http://blog.csdn.net/jesseyoung/article/details/41894521
博客主页:http://blog.csdn.net/jesseyoung
****************************************************************************************
以上就介绍了mysql主从复制-mysql5.6配置主从复制,包括了方面的内容,希望对MySql有兴趣的朋友有所帮助。
本文网址链接:http://www.codes51.com/article/detail_98979.html