首页 > 代码库 > MySQL主从复制
MySQL主从复制
测试环境:
master: CentOS 6.6 (x86_64), MySQL5.6.22
slave: Windows 8(x86_64), MySQL5.6.19
相关名词:主从复制,读写分离,数据备份
Replication允许将master数据库的数据复制到多个slave数据库上,replication默认是异步的,因此slave不需要永久的连接到master,slave可以不在线,一旦slave在线后,会把master最新的数据增量同步下来,replication允许复制整个database,或者某个database,或者某张表。
[mysqld]log-bin=mysql-binserver-id=1
innodb_flush_log_at_trx_commit=1
sync_binlog=1
重启mysql
2, 关闭slave数据库,编辑slave的my.ini,增加配置
[mysqld]server-id=2
重启mysql
3, 在master上创建replication帐号
mysql>CREATE USER ‘repl‘@‘%.mydomain.com‘ IDENTIFIED BY ‘slavepass‘;
mysql>GRANT REPLICATION SLAVE ON *.* TO ‘repl‘@‘%.mydomain.com‘;
mysql> FLUSH PRIVILEGES;
4, 获取master数据库binary log的名称和位置
打开第一个master session将数据库锁定,只允许读操作
mysql> FLUSH TABLES WITH READ LOCK;
打开另一个master session, 查看binary log的name、position
mysql > SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+--------------+------------------+| mysql-bin.000003 | 73 | test | manual,mysql |+------------------+----------+--------------+------------------+
如果你的master数据库之前没有使用binary log,这时候你看到的name和postion是空的,则在后面的操作中name=‘‘,position=4
如果你的数据库已经有数据了,需要在replication之前就导入到slave中,请保持master读锁,使用mysqldump将master的数据导出来并导入到slave数据库中。具体请参考第5步。
如果你的数据库之前没有数据,或者你不想要之前的数据了,则可以释放master锁,有2种方式释放:
1)直接退出第一个session
2)执行:
mysql> UNLOCK TABLES;
然后跳到第7节
5, 在master上使用mysqldump创建数据快照
说明:此节的目的是,如果master在replication之前已经有数据了,则需要在replication之前将这些数据从master数据库中导出,然后导入到slave数据库;这个操作完成之后就可以replication了;如果你的master之前没有数据,则跳过此节。
在master机器的shell上,执行以下命令,将整个db导出到dbdump.db文件中。(加上--master-data则在导出时先锁定表,然后再导数据,最后释放锁)-uroot -p参数可选,是指定master数据库帐号密码用的
shell> mysqldump -uroot -p --all-databases --master-data > dbdump.db
6, 将数据导入到slave数据库
-uroot -p参数可选,是指定slave数据库帐号密码用的
shell> mysql -uroot -p < dbdump.db
7, 在slave上设置master数据库连接信息
mysql>CHANGE MASTER TO
->MASTER_HOST=‘
->master_host_name
‘,MASTER_USER=‘
->replication_user_name
‘,MASTER_PASSWORD=‘
->replication_password
‘,MASTER_LOG_FILE=‘
->recorded_log_file_name
‘,MASTER_LOG_POS=
recorded_log_position
;
8, 启动slave线程
mysql> START SLAVE;
9, 当你不想replication了,可以在slave上停止slave线程
mysql> STOP SLAVE;
停止后你也可以重新start slave,replication机制会自动将这段时间master上的数据更新同步到slave。
10, 思考:
在项目中我们可以利用replication实现数据库读写分离,从而提升服务器性能。master数据库用于写,slave数据库用于读。
http://dev.mysql.com/doc/connector-j/en/connector-j-master-slave-replication-connection.html
11, 参考资料:
http://dev.mysql.com/doc/refman/5.6/en/replication.html
12,
MySQL主从复制
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。