MySQL互为主从数据同步部署操作方式
目录
- 一、环境准备
- 二、配置互为主从
- 1.编辑/etc/my.cnf文件
- 2.创建授权用户
- 3.查看binlog日志信息
- 4.配置主从
- 三、同步测试
- 总结
在mysql数据库管理中,实现互为主从的配置是一种常见的高可用性和数据冗余策略。
这种配置允许两个MySQL服务器相互复制数据,每个服务器既是对方的主服务器也是从服务器。
这样,无论哪个服务器发生故障,另一个都可以接管,保证数据的持续可用性和一致性。
一、环境准备
- 准备两台虚拟机(192.168.4.51 192.168.4.52)
- 关闭防火墙和selinux
- 确保两台虚拟机网络互通
- 两台虚拟机都安装了MySQL(5.7及以上的版本)
二、配置互为主从
1.编辑/etc/my.cnf文件
vim /etc/my.cnf
在[mysqld]模块下添加以下代码段
[mysqld] server-id=51 #标识 log_bin=/var/lib/mysql/mysql_log_bin #开启binlog并指定路径 binlog_format=mixed #binlog 格式(mixed 兼容 row 和 statement) log_slave_updates #开启主从 auto_increment_increment = 2 #主键自增量 auto_increment_offset = 1 #主键起始偏量
两台虚拟机操作一样 只是主键起始偏量不同为了避免主键相同而让其错开
让51主机的主键成 1 , 3 ,5 ,7…
而52主机的主键成 2 , 4, 6, 8…
vim /etc/my.cnf [mysqld] server-id=52 #标识 log_bin=/var/lib/mysql/mysql_log_bin #开启binlog并指定路径 binlog_format=mixed #binlog 格式(mixed 兼容 row 和 statement) log_slave_updates #开启主从 auto_increment_increment = 2 #主键自增量 auto_increment_offset = 2 #主键起始偏量
重启MySQL服务
[root@host51 ~]# systemctl restart mysqld
2.创建授权用户
两台虚拟机操作一样
mysql -uroot -p你的密码
创建连接用户 mysql> create user 'repl'@'%' identified by '123qqq...A'; Query OK, 0 rows affected (0.00 sec) 授权连接用户 mysql> grant replication slave on *.* to 'repl'@'%'; Query OK, 0 rows aff编程客栈ected (0.00 sec) 刷新权限 mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
3.查看binlog日志信息
查看192.168.4.51
mysql> show master status; +----------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +----------------------+----------+--------------+------------------+-------------------+ | mysql_log_bin.000004 | 1007 | 编程客栈 | | | +----------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.01 sec)
查看192.168.4.52
mysql> show master status -> ; +----------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +----------------------+----------+--------------+------------------+-------------------+ | mysql_log_bin.000004 | 1007 | | | | +----------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)
4.配置主从
首先在51主机上配置(52为主机)
mysql> change master to master_host='192.168.4.52', #设置主的IP地址 master_user='repl', #设置连接用户名 master_password='123qqq...A', #设置连接用户密码 master_log_file='mysql_log_bin.000004', #设置binlog文件名 master_log_pos=1007; #设置binlog 同步位置 Query OK, 0 rows affected, 2 warnings (0.00 sec)
其次再在52主机上配置(51为主机)
mysql> change master to master_host='192.168.4.51', master_user='repl', master_password='123qqq...A', master_log_file='mysql_log_bin.000004', master_log_pos=1007; Query OK, 0 rows affected, 2 warnings (0.01 sec)
启动并查看
mysql> start slave ; Query OK, 0 rows affected (0.00 sec) mysql> show slave status\G ; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.4.52 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql_log_bin.000004 Read_Master_Log_Pos: 1007 Relay_Log_File: host51-reljsay-bin.000003 Relay_Log_Pos: 324 Relay_Master_Log_File: mysql_log_bin.000004 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 1007 Relay_Log_Space: 702 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 52 Master_UUID: 888f4a92-acd3-11f0-8b2a-000c29a32fbd Master_Info_File: /var/lib/mysql/master.info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates Master_Retry_Count:编程客栈 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 php Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: 1 row in set (0.00 sec)
只要Slave_IO_Running: Yes与Slave_SQL_Running: Yes都为yes即为同步成功
- Slave_IO_Running: Yes – IO 线程正常(负责拉取主库binlog)
- Slave_SQL_Running: Yes– SQL 线程正常(负责执行同步的 SQL)
三、同步测试
在51主机上创建库表并插入数据
mysql> create database db1; Query OK, 1 row affected (0.00 sec) mysql> create table db1.user(id int primary key auto_increments); Query OK, 0 rows affected (0.01 sec) mysql> insert into db1.user values(1); Query OK, 1 row affected (0.00 sec)
在52主机上查询是否数据同步
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | db1 | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.00 sec) mysql> select * from db1.user; +------+ | id | +------+ | 1 | +------+ 1 row in set (0.00 sec)
然后再在52主机上创建库表并插入数据
mysql> create database DB2; Query OK, 1 row affected (0.00 sec) mysql> create table db2.user(id int primary key auto_increments); Query OK, 0 rows affected (0.01 sec) mysql> insert into db2.user values(2); Query OK, 1 row affected (0.00 sec)
在51主机上查询是否数据同步
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | db1 | | db2 | | mysql | | performance_schema | | sys | +--------------------+ 6 rows in set (0.00 sec) mysql> select * from db2.user; +------+ | id | +------+ | 2 | +------+ 1 row in set (0.00 sec)
可看到两次数据的同步都成功了
至此互为主从配置成功数据同步成功!
总结
通过以上步骤我们完成了MySQL的互为主从配置并实现数据同步。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。
精彩评论