andy发表:
#>0思路
比如:你从a数据库导出a.sql,在b机导入a.sql,你说a和b这段数据是不是完全一样的??一样吧?!好,那a和b约定好,只要a一动,就如上述传一次数据,你说ab是否就同步了呢?当然啦!那这个工作能不能自动化,而且更延时最小几乎是实时的,要高效还要稳定可靠?
能!都能!!--- 前辈都想到了,程序也写好了,这就是同步技术。而且前辈人想到的更多更全更远,看官请听。
#>0>1. mysql 有bin-log(二进制日志)这个功能。二进制=可移植可执行[就是哪台机拿到都能直接运行],日志=实时记录,有了它,人工从a库导出a.sql,这一步有了自动化级的实现方式。
#>0>2.让a,b机器建立关联,tcp/Ip保连接,哪台生成日志并发出,哪N台接收并执行。
#>0>3.其他配置项,传输的频次,能不能只传其中一个库等等 甚至二进制程序如何生成,怎么运行,怎么传输等等不属于配置问题了, mysql已实现。不用操心,想研究个具体实现的请进入另一个主题
#>1. 第一台机器叫主服,让他来生成日志并发出。给这台mysql起个名字server-id = 1 开启二进制日志,给日志起个文件名,存放路径也可以自己定,不写就默认
echo "server-id=1
log_bin=mysql-bin
log_error=mysql-bin.err
lower_case_table_names=1"
>> /etc/mysql/conf.d/my.cnf
// 不需要同步哪些-就设置不产生日志,另一台就自然没了来源。
binlog-ignore-db = mysql
binlog-ignore-db = test
// 只同步指定数据库,除此之外,其他不同步
binlog-do-db = game
binlog-ignore-db = information_schema
#>2.在主服务器创建一个专门的同步用户,一般都是只读嘛
GRANT REPLICATION SLAVE ON *.* TO "slave"@"%" IDENTIFIED BY "123456";
#>3.
!!建好后千万别乱动!!,一动就有日志了呀,是不是这个道理?走,搞另一台服务器叫从服吧。
#>4.在从服务器上加入对应的主服务器配置信息。
上文有提到要分配 server-id,别忘记了,
master就是主机嘛, master的ip/数据库端口/同步用的账户/密码/日志文件名/位置。
下面不能全复制!!后两项会一直变,第5告诉你怎么查。
CHANGE MASTER TO
MASTER_HOST="172.19.6.2",
MASTER_PORT=3306,
MASTER_USER = "slave",
MASTER_PASSWORD = "123456",
MASTER_LOG_FILE = "slave-mysql-bin.000001",
MASTER_LOG_POS = 430;
#>5其他用到的命令
mysql文件配置文件地址 /etc/mysql/conf.d/my.cnf
start slave//开始同步。
stop slave;//修改配置信息时, 需要先停止同步服务。
show slave status //看你配置成功没
show master status//第4项用得上
show grants for "slave"@"%" //看你要复制的库有没有权限。
#>6特别提示
流程确保没问题,但同步配置失败3-5次是正常的。
两台数据库同时配置完成,再操作建库建表等数据操作.关键问题:就是不要在没同步前产生日志.
配置成功后建议,要多试几次,测试几个功能点。如果配置失败,你就更要多再多试几次。