4台服务器,4个网站mysql数据库,如果实时同步?
发布网友
发布时间:2022-04-23 18:59
我来回答
共3个回答
热心网友
时间:2022-04-09 11:57
查找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:~$ mysqlmp -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;
数据的拷贝简单来说就是主从服务器上要同步的数据库结构必须是一样的
参考资料:http://blog.csdn.net/jiangfeng08/article/details/6234901
热心网友
时间:2022-04-09 13:15
要说具体点追问就是每一个mysql数据库有新数据加入,另外三台会自动采集啊,实现四个数据库的数据一模一样
热心网友
时间:2022-04-09 14:50
4个网站共用一个数据库就可以了。但是这样子没意思吧。你指望百度同时收录四个一模一样的?追问没用的话我JB瞎折腾?