使用数据库 MYSQL或者MariaDb
1. 操作系统 Centos Ubantu Debian等,配置文件位置可能不同。
2. 配置文件位置 可能为 /etc/my.cnf
/etc/my.cnf.d/server.cnf
/etc/mysql/mariadb.conf.d/50-server.cnf
主服务器配置
- 示例使用 10.0.0.1 作为主服务器
- 安装mariadb-server 10.3版本
修改/etc/my.cnf 配置文件
添加如下[mysqld] server-id=1 #数据库唯一ID,主从的标识号绝对不能重复。 log-bin=mysql-bin #开启bin-log,并指定文件目录和文件名前缀 binlog-do-db=typecho #需要同步liting数据库。如果是多个同步库,就以此格式另写几行即可。如果不指明对某个具体库同步,就去掉此行,表示同步所有库(除了ignore忽略的库)。 binlog-ignore-db=mysql #不同步mysql系统数据库。如果是多个不同步库,就以此格式另写几行;也可以在一行,中间逗号隔开。 sync_binlog = 1 #确保binlog日志写入后与硬盘同步 binlog_checksum = none #跳过现有的采用checksum的事件,mysql5.6.5以后的版本中binlog_checksum=crc32,而低版本都是binlog_checksum=none binlog_format = mixed #bin-log日志文件格式,设置为MIXED可以防止主键重复。
同时将下行注释掉
#bind-address=127.0.0.1
进入数据库,配置远程访问,查看主服务器master状态(注意File与Position项,从服务器需要这两项参数)
mysql -u root -p grant replication slave,replication client on *.* to root@'%' identified by"123123123"; flush privileges; show master status \G
主服务器master状态输出
File: mysql-bin.000001 Position: 4994 Binlog_Do_DB:
row in set (0.00 sec)
**导出需要同步的数据库表,可以备份导出,也可以使用Navicat 等工具进行一次数据同步。**
- 配置好网络,确认能和主服务器通信,并安装好数据库。
修改
/etc/my.cnf
配置文件
添加如下[mysqld] server-id=2 #设置从服务器id,必须于主服务器不同 log-bin=mysql-bin #启动MySQ二进制日志系统 replicate-do-db=typecho #需要同步的数据库名。如果不指明同步哪些库,就去掉这行,表示所有库的同步(除了ignore忽略的库)。 replicate-ignore-db=mysql #不同步test数据库 slave-skip-errors = all #跳过所有的错误,继续执行复制操作
进入数据库,导入从主服务器备份的表,确保数据与当前主服务器一致。
配置主从同步指令
mysql -u root -p #连接数据库 stop slave; #执行同步前,要先关闭slave change master to master_host='10.0.0.1',master_user='root',master_password='123123123',master_log_file='mysql-bin.000001',master_log_pos=4994; start slave; #启动同步功能
注意:master_log_file 和 master_log_pos 设置为主服务器查看到的File与Position项。
查看同步状态
show slave status \G
如果有如下显示:Slave_IO_Running: Yes Slave_SQL_Running: Yes
则同步配置成功,现在修改主服务器上数据,从服务器数据也会自动同步。
主主同步配置
mysql中有自增长字段,在做数据库的主主同步时需要设置自增长的两个相关配置:auto_increment_offset和auto_increment_increment。
auto_increment_offset表示自增长字段从那个数开始,他的取值范围是1 .. 65535
auto_increment_increment表示自增长字段每次递增的量,其默认值是1,取值范围是1 .. 65535
在主主同步配置时,需要将两台服务器的auto_increment_increment增长量都配置为2,而要把auto_increment_offset分别配置为1和2.
这样才可以避免两台服务器同时做更新时自增长字段的值之间发生冲突。
主数据库服务器1 my.cnf 配置
server-id = 1
log-bin = mysql-bin
binlog-ignore-db = mysql,information_schema
sync_binlog = 1
binlog_checksum = none
binlog_format = mixed
auto-increment-increment = 2
auto-increment-offset = 1
slave-skip-errors = all
主数据库服务器2 my.cnf 配置
server-id = 2
log-bin = mysql-bin
binlog-ignore-db = mysql,information_schema
sync_binlog = 1
binlog_checksum = none
binlog_format = mixed
auto-increment-increment = 2
auto-increment-offset = 2
slave-skip-errors = all
数据库2也需要开放外部访问权限,然后先在数据库2配置对数据库1的同步,再配置数据库1对数据库2的同步
slave stop;
change master to master_host='10.0.0.1',master_user='root',master_password='123123123',master_log_file='master-bin.000001',master_log_pos=160;
start slave;
show slave status \G
slave stop;
change master to master_host='10.0.0.2',master_user='root',master_password='123123123',master_log_file='master-bin.000001',master_log_pos=271;
start slave;
show slave status \G