所谓双主备份,其实也就是互做主从复制,每台master既是master,又是另一台服务器的slave。
目录
一、环境准备
二、数据库安装:
三、修改默认存储路径(AB库)
四、MasterA配置
五、MasterB配置
六、MasterA操作
七、MasterB操作
八、开启同步(AB库)
九、验证
一、环境准备
操作系统:CentOS 7. 6
数据库:MySQL 8.0.30
masterA | 192.168.0.62 |
masterB | 192.168.0.123 |
二、数据库安装:
略
安装完成后登录数据库,修改root的密码认证方式,主要是为了保证低版本的navicat可以连接数据库。
select user,host,plugin from mysql.user;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
flush privileges;
三、修改默认存储路径(AB库)
mysql安装完成后,默认存储路径会放在/var/lib/mysql下,但是通常情况下,根目录分配的磁盘空间有限,需要将存储路径修改至数据盘。
例如数据盘挂载在“/data”下:
service mysqld stop #停止mysql服务
cd /var/lib cp -a mysql /data/
vi /etc/my.cnf
修改datadir,将datadir=/var/lib/mysqld改为atadir=/data/mysql
service mysqld start #启动mysql服务
四、MasterA配置
vi /etc/my.cnf
增加以下配置
server-id=1 #服务器的标识,要求每个节点id不一致
log-bin=mysql-bin1 #日志文件名称,每个节点名称不一致
log-slave-updates
slave-skip-errors=all
sync_binlog=1
auto_increment_increment=2 #需要将两台服务器的auto_increment_increment增长量都配置为2
auto_increment_offset=1 #把auto_increment_offset分别配置为1和2,这样可以避免两台服务器同时做更新时,自增长字段的值之间发生冲突。
max_connections = 3000
max_allowed_packet = 64M
default_authentication_plugin = mysql_native_password #MySQL8.0.4开始,默认身份认证开始改变。因为之前,MySQL的密码认证插件是“mysql_native_password”,而现在使用的是“caching_sha2_password”。
mysql -u root -p #登录数据库
create user 'repl'@'%' identified by 'password'; #创建用户
grant replication slave on *.* to 'repl'@'%'; #授权用户
flush privileges;
flush tables with read lock; #锁定数据库表暂时无法写服务
show master status; #查看binlog文件值与pos值,记住文件名和pos值
五、MasterB配置
vi /etc/my.cnf
增加以下配置
server-id=2 #服务器的标识,要求每个节点id不一致
log-bin=mysql-bin2 #日志文件名称,每个节点名称不一致
log-slave-updates
slave-skip-errors=all
sync_binlog=1
auto_increment_increment=2 #需要将两台服务器的auto_increment_increment增长量都配置为2
auto_increment_offset=2 #把auto_increment_offset分别配置为1和2,这样可以避免两台服务器同时做更新时,自增长字段的值之间发生冲突。
max_connections = 3000
max_allowed_packet = 64M
default_authentication_plugin = mysql_native_password #MySQL8.0.4开始,默认身份认证开始改变。因为之前,MySQL的密码认证插件是“mysql_native_password”,而现在使用的是“caching_sha2_password”。
mysql -u root -p #登录数据库
create user 'repl'@'%' identified by 'password'; #创建用户
grant replication slave on *.* to 'repl'@'%'; #授权用户
flush privileges;
flush tables with read lock; #锁定数据库表暂时无法写服务
show master status; #查看binlog文件值与pos值,记住文件名和pos值
六、MasterA操作
mysql -u root -p #登录数据库
change master to master_host='192.168.0.123', master_user='repl', master_password='password',master_port=3306, master_log_file='mysql-bin2.000001', master_log_pos=536; #host配置为MasterB的IP,这里注意log_file与master_log_pos值都要对应对应B的show master status;值
七、MasterB操作
mysql -u root -p #登录数据库
change master to master_host='192.168.0.62', master_user='repl', master_password='password',master_port=3306, master_log_file='mysql-bin1.000001', master_log_pos=546; #master_host配置为MasterA的IP,这里注意log_file与master_log_pos值都要对应对应A的show master status;值
八、开启同步(AB库)
mysql -u root -p #登录数据库
unlock tables; #解锁写
start slave; #开启同步
show slave status\G #查看数据库是否正常同步
九、验证
可以使用navicat连接数据库,进行建库、建表、增删改等操作,验证数据是否同步。