MySQL主从复制

Mysql主从方案介绍

 

mysql主从方案主要作用:

读写分离,使数据库能支撑更大的并发。在报表中尤其重要。由于部分报表sql语句非常的慢,导致锁表,影响前台服务。如果前台使用master,报表使用slave,那么报表sql将不会造成前台锁,保证了前台速度。

发扬不同表引擎的优点。目前Myisam表的查询速度比innodb略快,而写入并发innodb比myIsam要好。那么,我们可以使用innodb作为master,处理高并发写入,使用master作为slave,接受查询。或在myisam slave中建立全文索引,解决innodb无全文索引的弱点。

热备,slave和master的数据“准实时”同步。

 

准备工作。先分别安装两台MYSQL(主服务器:192.168.84.137,从服务器:192.168.84.130)

配置MASTER。找到my.cnf文件,修改:

 

server-id = 1

log_bin = /var/log/mysql/mysql-bin.log

expire_logs_days = 10

max_binlog_size         = 100M

binlog_do_db = study #要备份的数据库

#binlog_do_db = backup #要备份的数据库

#binlog_ignore_db = test #不需要备份的数据库

 

其中,虽然作为主机,但server-id不是必须为1.但一般都填1

binlog_do_db为需要复制的db。 binlog_ignore_db为忽略复制的db。需要增加DB的话,就增加相应的一行。(最好写在从库配置)

 

重启master数据库,运行检查:

 

mysql> show master status; #检查是否以master形式启动了。

+------------------+----------+----------------------------------+------------------+

| File             | Position | Binlog_Do_DB                     | Binlog_Ignore_DB |

+------------------+----------+----------------------------------+------------------+

| mysql-bin.000001 |     1087 | study,backup                     |       test

+------------------+----------+----------------------------------+------------------+

1 row in set (0.00 sec)

 

mysql> show variables like "%log%";

#需要看到这样的一行,说明binlog已经开启了: log_bin | ON

 

 

在master上为slave建立用户

mysql> grant replication slave on *.* to 'replication'@'192.168.84.130' identified by '123456';

这样,主机配置完毕。

 

配置slave

 

server-id = 2  #随便什么数字,多台slave注意不能为重复就可以了。

#log_bin = /var/log/mysql/mysql-bin.log #slave的binlog就没有必要再开启了。注释掉。

master-host             = 192.168.84.137    #master的IP

master-user             = replication        #上面操作中,建立的用户名

master-password         = 123456       #上面操作中,建立的密码

 

配置生效后,配置与master的连接:

mysql> CHANGE MASTER TO

    -> MASTER_HOST='192.168.84.137',

    -> MASTER_USER='replication',

    -> MASTER_PASSWORD='123456',

    -> MASTER_LOG_FILE='mysql-bin.000001',

    -> MASTER_LOG_POS=1087;

其中MASTER_HOST是master机的ip,MASTER_USER和MASTER_PASSWORD就是我们刚才在master上添加的用户,MASTER_LOG_FILE和MASTER_LOG_POS对应与master status里的信息

 

 

slave:mysql> show slave status/G;

#很多很多列

 

======================================================================================================

到此,可以做一些检测性的东西:

有三个地址必须调试成功,

 

1  从库连接主库进行测试: mysql -h192.168.84.137 -ureplication -p123456     此处必须连接成功

 

2  show master status;必须有相关显示

 

3 show slave status;

 

 必须为

 

  Slave_IO_Running: Yes

 

  Slave_SQL_Running: Yes

 

 如果Slave_IO_Running为No,可以考虑执行下面的语句,根据实际进行修改。

 

SLAVE STOP;

CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=实际Position;

SLAVE START;

此时Slave_IO_Running应该恢复为Yes,同步进行了!

 

如果Slave_IO_Running仍然为No,则可以考虑重新启动mysql

 

==================================================================================================

 

接下来,将主机数据 copy 过来

 

这个流程比较复杂:)各个步骤注意所在的机器

 

slave:mysql> stop slave;   #停掉slave的复制先。

 

master:mysql> flush tables with read lock; #锁掉master服务器的所有表,禁止写入。

 

master:mysql> show master status; #还是上面的语句,查看并记录下 File mysql-bin.000002, Position 1087

+------------------+----------+----------------------------------+------------------+

| File             | Position | Binlog_Do_DB                     | Binlog_Ignore_DB |

+------------------+----------+----------------------------------+------------------+

| mysql-bin.000001 |     1087 | study                            | test             |

+------------------+----------+----------------------------------+------------------+

1 row in set (0.00 sec)

 

chluo@master:~$ mysqldump -uroot -pxl study > study.sql  #在命令行中导出DB的数据,这里是bash操作:)

 

master:mysql> unlock tables; #导出完成之后,解锁。 master可以继续跑起来了。

 

chluo@master:~$ scp study.sql root@192.168.84.130:/ #将导出的sql传送到从服务器

 

chluo@slave:/$ mysql -uroot -pxl study < study.sql  #在slave的命令行中导入DB的数据,这里又是bash操作:)

 

slave:mysql> start slave;

 

 

数据的拷贝简单来说就是主从服务器上要同步的数据库结构必须是一样的

 

 

######################如有问题请联系 wangzhanu@126.com ###########################

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值