来源: http://www.luochunhui.com/id/550
mysql主从方案主要作用:
读写分离,使数据库能支撑更大的并发。在报表中尤其重要。由于部分报表sql语句非常的慢,导致锁表,影响前台服务。如果前台使用master,报表使用slave,那么报表sql将不会造成前台锁,保证了前台速度。
发扬不同表引擎的优点。目前Myisam表的查询速度比innodb略快,而写入并发innodb比myIsam要好。那么,我们可以使用innodb作为master,处理高并发写入,使用master作为slave,接受查询。或在myisam
slave中建立全文索引,解决innodb无全文索引的弱点。
热备,slave和master的数据“准实时”同步。
准备工作。先分别安装两台MYSQL
配置MASTER。找到my.cnf文件,修改:
1
server-id =
1
2
log_bin
= /var/log/mysql/mysql-bin.log
3
expire_logs_days = 10
4
max_binlog_size
= 100M
5
binlog_do_db
= DB_AdidasFootball
6
binlog_do_db
= DB_CodeBuilder
7
binlog_ignore_db
=test
其中,作为主机,server-id必须为1.
binlog_do_db为需要复制的db。 binlog_ignore_db为忽略复制的db。需要增加DB的话,就增加相应的一行。
重启master数据库,运行检查:
01
mysql> show master
status;#检查是否以master形式启动了。
02
+------------------+----------+----------------------------------+------------------+
03
|
File
| Position |
Binlog_Do_DB
| Binlog_Ignore_DB |
04
+------------------+----------+----------------------------------+------------------+
05
| mysql-bin.000002 | 1087 |
DB_AdidasFootball,DB_CodeBuilder |test |
06
+------------------+----------+----------------------------------+------------------+
07
1 rowin set (0.00
sec)
08
09
mysql> show variables
like"%log%";
10
#需要看到这样的一行,说明binlog已经开启了: log_bin | ON
在master上为slave建立用户
1
mysql>grant replication
slave, reload, superon *.*to 'slave'@'10.*'identifiedby '123456';
这样,主机配置完毕。
配置slave
1
server-id =
2#随便什么数字,多台slave注意不能为重复就可以了。
2
#log_bin =
/var/log/mysql/mysql-bin.log
#slave的binlog就没有必要再开启了。注释掉。
3
master-host
=
192.168.0.3#master的IP
4
master-user
=
slave#上面操作中,建立的用户名
5
master-password
=
123456#上面操作中,建立的密码
重启slave, 检查salve状态
1
slave:mysql> show slave status;
2
#很多很多列
接下来,将主机数据 copy 过来
这个流程比较复杂:)各个步骤注意所在的机器
01
slave:mysql> stop
slave;#停掉slave的复制先。
02
03
master:mysql> flush tables
withread lock;#锁掉master服务器的所有表,禁止写入。
04
05
master:mysql> show master
status;#还是上面的语句,查看并记录下
File mysql-bin.000002, Position 1087
06
+------------------+----------+----------------------------------+------------------+
07
|
File
| Position |
Binlog_Do_DB
| Binlog_Ignore_DB |
08
+------------------+----------+----------------------------------+------------------+
09
| mysql-bin.000002 | 1087 |
DB_AdidasFootball,DB_CodeBuilder |test |
10
+------------------+----------+----------------------------------+------------------+
11
1 rowin set (0.00
sec)
12
13
chluo@master:~$ mysqldump AdidasFootball >
AdidasFootball.sql#在命令行中导出DB的数据,这里是bash操作:)
14
15
master:mysql> unlock
tables;#导出完成之后,解锁。
master可以继续跑起来了。
16
17
chluo@slave:~$ mysql AdidasFootball <
AdidasFootball.sql#在slave的命令行中导入DB的数据,这里又是bash操作:)
18
19
slave:mysql> change master to
20
->
master_log_file='mysql-bin.000002',#将这里修改为刚记录下来的数据
21
->
master_log_pos=1087;#还有这里
22
23
slave:mysql> start slave;
完成。
注意事项
从机必须有其需要的数据库,才能够进行同步,否则会忽略。