Mysql主从方案介绍mysql主从方案主要做用:
读写分离,使数据库能支撑更大的并发。在报表中尤为重要。因为部分报表sql语句很是的慢,致使锁表,影响前台服务。若是前台使用master,报表使用slave,那么报表sql将不会形成前台锁,保证了前台速度。
发扬不一样表引擎的优势。目前Myisam表的查询速度比innodb略快,而写入并发innodb比myIsam要好。那么,咱们可使用innodb做 为master,处理高并发写入,使用master做为slave,接受查询。或在myisam slave中创建全文索引,解决innodb无全文索引的弱点。
热备,slave和master的数据“准实时”同步。
准备工做。先分别安装两台MYSQL
配置MASTER。找到/ect/my.cnf文件,修改:php
server-id = 1 log_bin = /var/log/mysql/mysql-bin.log expire_logs_days = 10 max_binlog_size = 100M binlog_do_db = DB_AdidasFootball binlog_do_db = DB_CodeBuilder binlog_ignore_db = test
其中,做为主机,server-id必须为1.
binlog_do_db为须要复制的db。 binlog_ignore_db为忽略复制的db。须要增长DB的话,就增长相应的一行。
重启master数据库,运行检查:mysql
mysql> show master status; #检查是否以master形式启动了。 +------------------+----------+----------------------------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+----------------------------------+------------------+ | mysql-bin.000002 | 1087 | DB_AdidasFootball,DB_CodeBuilder | test | +------------------+----------+----------------------------------+------------------+ 1 row in set (0.00 sec) mysql> show variables like "%log%"; #须要看到这样的一行,说明binlog已经开启了: log_bin | ON
在master上为slave创建用户
sql
mysql> grant replication slave on *.* to 'testuser'@'192.168.2.77' identified by 'testpassword';
注意:这里是ip 192.168.2.77即从库的ip
数据库
这样,主机配置完毕。
配置slave
bash
server-id = 2 #随便什么数字,多台slave注意不能为重复就能够了。 #log_bin = /var/log/mysql/mysql-bin.log #slave的binlog就没有必要再开启了。注释掉。 master-host = 192.168.0.3 #master的IP master-user = slave #上面操做中,创建的用户名 master-password = 123456 #上面操做中,创建的密码
重启slave, 检查salve状态
服务器
slave:mysql> show slave status; #不少不少列
slave:mysql>stop slave; #停掉slave的复制先。 slave:mysql>change master to master_host='192.168.1.2' , master_user='slave' , master_password='123456' , master_log_file='mysql-bin.000014' , master_log_pos=279;#更新master 即前面看到的信息 slave:mysql>start slave; #启动slave的复制。 slave:mysql>show slave status; #查看slave状态,包含两个YES则成功了。
接下来,将主机数据 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.000002 | 1087 | DB_AdidasFootball,DB_CodeBuilder | test | +------------------+----------+----------------------------------+------------------+ 1 row in set (0.00 sec) chluo@master:~$ mysqldump AdidasFootball > AdidasFootball.sql #在命令行中导出DB的数据,这里是bash操做:) master:mysql> unlock tables; #导出完成以后,解锁。 master能够继续跑起来了。 chluo@slave:~$ mysql AdidasFootball < AdidasFootball.sql #在slave的命令行中导入DB的数据,这里又是bash操做:) slave:mysql> change master to -> master_log_file='mysql-bin.000002', #将这里修改成刚记录下来的数据 -> master_log_pos=1087; #还有这里 slave:mysql> start slave;
完成。
注意事项 从机必须有其须要的数据库,才可以进行同步,不然会忽略。ide