mysql数据同步问题 10

需求:有3台服务器,分别安装相同版本mysql数据库,3台mysql数据库中的数据库(假如数据库名为a)和表完全相同,但a数据库中的某些张表存在主外键关系。3台服务器以不... 需求:有3台服务器,分别安装相同版本mysql数据库,3台mysql数据库中的数据库(假如数据库名为a)和表完全相同,但a数据库中的某些张表存在主外键关系。3台服务器以不同的时间去上线使用(一般使用几天时间),完了之后把3台服务器拿回公司,需要把其中两台数据库的数据同步的其中一台数据库中,各位大神有什么好的解决方案吗,感谢感谢。 展开
 我来答
折柳成萌
高粉答主

2018-03-28 · 繁杂信息太多,你要学会辨别
知道顶级答主
回答量:4.4万
采纳率:96%
帮助的人:6223万
展开全部
查找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;
云南新华电脑学校
2018-04-19 · 百度认证:云南新华电脑职业培训学校官方账号
云南新华电脑学校
云南新华电脑学校是经云南省教育厅批准成立的省(部)级重点计算机专业学校,采用三元化管理模式,教学设备先进,师资雄厚学生毕业即就业,学院引进了电商企业入驻,创建心为电商创业园区,实现在校即创业
向TA提问
展开全部
--主机开两个窗口,一个进入mysql,一个是shell
--主机阻断写操作
mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)
mysql>
mysql>
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 | 1529881 | openser | mysql,test |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
--另外一个窗口导出主机数据库
mysqldump -u root -p123456 --opt -R openser > openser20121203.sql
--刚才的窗口主机解锁
mysql> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)
mysql>
--打包数据文件到从机
drop database openser;
create database openser;
mysql -u root -p123456 openser < openser20121127.sql
--从机操作
SLAVE STOP;
reset slave;
CHANGE MASTER TO MASTER_HOST='192.168.21.26',
MASTER_USER='repl_user',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=1529881;
start slave;
show slave status\G
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式