一、准备工作:
1.主从数据库版本最好一致
2.主从数据库内数据保持一致
主1(从2)数据库:192.168.206.132 /linux
主2(从1)数据库:192.168.206.134 /linux
二、主数据库master1修改:
1.修改mysql.conf,在[mysqld]部分插入:
server-id=1
log-bin=mysql-bin
auto_increment_offset=1
auto_increment_increment=2
#在主主同步配置时,需要将两台服务器的auto_increment_increment增长量都配置为2,而要把auto_increment_offset分别配置为1和2。这样才可以避免两台服务器同时做更新时自增长字段的值之间发生冲突。
#master开启二进制日志后默认记录所有库所有表的操作,可以通过配置来指定只记录指定的数据库甚至指定的表的操作,具体在my.cnf配置文件的[mysqld]下可添加修改如下选项:
# 不同步哪些数据库
binlog-ignore-db = mysql
binlog-ignore-db = test
binlog-ignore-db = information_schema
# 只同步哪些数据库,除此之外,其他不同步
binlog-do-db = game
# 如之前查看master状态时就可以看到库的状态:
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 | 956 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
2.重启mysql,创建用于同步的用户账号rep1
mysql> CREATE USER 'rep1'@'192.168.206.134' IDENTIFIED BY 'Slavepasswd';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'rep1'@'192.168.206.134';
mysql> flush privileges;
3.查看master状态,记录二进制文件名(mysql-bin.000002)和位置(792):
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 | 792 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
4.在master服务器的防火墙上开启mysql端口
三、主数据库master2修改:
1.修改mysql.conf,在[mysqld]部分插入:
server-id=2
log-bin=mysql-bin
auto_increment_offset=2
auto_increment_increment=2
#在主主同步配置时,需要将两台服务器的auto_increment_increment增长量都配置为2,而要把auto_increment_offset分别配置为1和2。这样才可以避免两台服务器同时做更新时自增长字段的值之间发生冲突。
#master开启二进制日志后默认记录所有库所有表的操作,可以通过配置来指定只记录指定的数据库甚至指定的表的操作,具体在mysql配置文件的[mysqld]可添加修改如下选项:
# 不同步哪些数据库
binlog-ignore-db = mysql
binlog-ignore-db = test
binlog-ignore-db = information_schema
# 只同步哪些数据库,除此之外,其他不同步
binlog-do-db = game
# 如之前查看master状态时就可以看到库的状态:
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 | 956 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
2.重启mysql,创建用于同步的用户账号rep1
mysql> CREATE USER 'rep2'@'192.168.206.132' IDENTIFIED BY 'Slavepasswd';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'rep2'@'192.168.206.132';
mysql> flush privileges;
3.查看master状态,记录二进制文件名(mysql-bin.000002)和位置(792):
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 | 792 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
4.在master服务器的防火墙上开启mysql端口
四、从数据库Slave1(主master2)修改:
1.执行同步SQL语句(需要主服务器主机名,登陆凭据,二进制文件的名称和位置):
mysql> change master to master_host='192.168.206.132',master_user='rep1',master_password='Slavepasswd',master_log_file='mysql-bin.000002',master_log_pos=792;
2.启动slave同步进程:
mysql> start slave;
3.查看slave状态:
mysql> show slave status\G
五、从数据库Slave2(主master1)修改:
1.执行同步SQL语句(需要主服务器主机名,登陆凭据,二进制文件的名称和位置):
mysql> change master to master_host='192.168.206.134',master_user='rep2',master_password='Slavepasswd',master_log_file='mysql-bin.000002',master_log_pos=792;
2.启动slave同步进程:
mysql> start slave;
3.查看slave状态:
mysql> show slave status\G
主主同步可以理解为两台主机各为主备,但要注意的是在开启主从同步之前,需要将两台数据库的数据完全同步。
单主从复制的话则不需要添加auto_increment_offset和auto_increment_increment参数,开启bin-log二进制日志,添加server-id即可实现一主一从复制或一主多从复制。
以上就是MySQL主主备份的全部内容。