当前位置:首页 > MySQL
MySQL 5.6 主从同步配置
来源:靑龍一笑的博客  作者:靑龍一笑  发布时间:2016-01-23 11:30:34  点击量:816  评论:0

    首先,对数据库进行备份。数据库备份命令如下:

[root@RicenOS ~]# /usr/bin/mysqldump -uroot -plucky2012 --lock-all-tables --routines --triggers blog | gzip > ./blog_20160123.sql.gz

    另外,还需要准备以下五张数据表:

innodb_index_stats、innodb_table_stats、slave_master_info、slave_relay_log_info、slave_worker_info

    这里可以写一个脚本程序,从全新的 MySQL 数据库中导出:

#!/bin/sh
set -e
TABLELIST="innodb_index_stats"
TABLELIST="${TABLELIST} innodb_table_stats"
TABLELIST="${TABLELIST} slave_master_info"
TABLELIST="${TABLELIST} slave_relay_log_info"
TABLELIST="${TABLELIST} slave_worker_info"
/usr/bin/mysqldump -uroot -plucky2012 mysql ${TABLELIST} > mysql_innodb_tables.sql

    执行上述脚本,可以导出 mysql_innodb_tables.sql 文件。

一、主服务器的配置

    假设主服务器为 10.18.16.188。
    1、停止 MySQL 数据库
    2、修改配置文件:

[root@RicenOS ~]# vi /etc/my.cnf

    添加如下代码:

server-id=1
log-bin=mysql-bin
log-bin=mysql-bin.log
binlog-do-db=blog
binlog-ignore-db=mysql
binlog-ignore-db=test
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema

    其中,第一行是必须的,默认是 1;第二行是必须的,启用二进制日志;第三行是必须的,数据库日志文件;第四行是要记录的数据库,多个的时候可以换行多次设置;第五到第八行不对 MySQL 自带的库进行日志记录操作。
    3、进入到 /var/lib/mysql 目录下,删除如下文件:

mysql-bin.index、ibdata1、ib_logfile0、ib_logfile1、localhost.localdomain.err

    4、进入到 /var/lib/mysql/mysql 目录下,使用如下命令删除五个数据表文件:

[root@RicenOS mysql]# rm -rf innodb_index_stats.*
[root@RicenOS mysql]# rm -rf innodb_table_stats.*
[root@RicenOS mysql]# rm -rf slave_master_info.*
[root@RicenOS mysql]# rm -rf slave_relay_log_info.*
[root@RicenOS mysql]# rm -rf slave_worker_info.*

    5、启动 MySQL 数据库
    6、导入之前准备的 mysql_innodb_tables.sql 文件:

mysql> use mysql
mysql> source /root/mysql_innodb_tables.sql

    7、创建用于主从复制的帐号:

mysql> grant replication slave on *.* to 'root'@'10.18.16.188' identified by 'lucky2012';

    8、对主数据库进行锁表:

mysql> flush tables with read lock;

    9、开启另外一个会话窗口,登录到 MySQL,查看两个值:二进制日志文件及其位置。

mysql> show master status;


    10、对主数据库表进行解锁:

mysql> unlock tables;

二、从服务器的配置

    1、停止 MySQL 数据库
    2、修改配置文件:

[root@RicenOS ~]# vi /etc/my.cnf

    添加如下代码:

server-id=2
log-bin=mysql-bin.log
replicate-do-db=blog
replicate-ignore-db=mysql
replicate-ignore-db=test
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
log-slave-updates

    其中,第一行是必须的,数字大于 1 即可;第二行是必须的,数据库日志文件;第三行是要复制的数据库,多个的时候可以换行多次设置;第四到第七行不对 MySQL 自带的库进行复制操作;第八行将从服务器的更新写入二进制日志。
    3、进入到 /var/lib/mysql 目录下,删除如下文件:

mysql-bin.index、ibdata1、ib_logfile0、ib_logfile1、localhost.localdomain.err

    4、进入到 /var/lib/mysql/mysql 目录下,使用如下命令删除五个数据表文件:

[root@RicenOS mysql]# rm -rf innodb_index_stats.*
[root@RicenOS mysql]# rm -rf innodb_table_stats.*
[root@RicenOS mysql]# rm -rf slave_master_info.*
[root@RicenOS mysql]# rm -rf slave_relay_log_info.*
[root@RicenOS mysql]# rm -rf slave_worker_info.*

    5、启动 MySQL 数据库
    6、导入之前准备的 mysql_innodb_tables.sql 文件:

mysql> use mysql
mysql> source /root/mysql_innodb_tables.sql

    7、从数据库设置复制的主数据库信息:

mysql> change master to master_host='10.18.16.188',master_user='root',master_password='lucky2012',master_log_file='mysql-bin.000001',master_log_pos=120;

    8、启动从数据库的复制线程:

mysql> start slave;

    9、查询从数据库的slave状态:

mysql> show slave status G

    如果以下两个参数都是Yes,说明主从配置成功:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

三、还原数据库

[root@RicenOS ~]# gunzip blog_20160123.sql.gz
mysql> create database blog default character set utf8;
mysql> use blog
mysql> source /root/blog_20160123.sql
版权所有 © 2005-2023 靑龍一笑的博客  Powered by C.S.Ricen
Copyright © 2005-2023 by www.ricensoftwares.com.cn  All Rights Reserved.

欢迎光临本站,这里是靑龍一笑的博客。

因资金匮乏,本站已迁到国外的免费空间,可能导致本站的访问速度较慢,由此给您带来的不便,敬请谅解。

您可以通过下方的“支持本站建设”链接,给本站提供资金支持。

Free Web Hosting