当前位置:   article > 正文

MySql两台机器互为主从_mysql互为主从

mysql互为主从

1、安装MySQL

参考:CentOS7安装mysql-5.7.44单机和主从复制_centosmysql5.7.44安装-CSDN博客

配置my.cnf

vi /etc/my.cnf

  1. [mysqld]
  2. # 指定Mysql数据库的开放端口。
  3. port = 3306
  4. # 设置Mysql数据库的安装目录(绝对路径)。
  5. basedir = /usr/local/mysql
  6. # 设置Mysql数据库的数据存放的绝对路径(存放目录)。必须是data,或者是\\xxx-data(my.ini需要,my.cnf不需要)。
  7. datadir = /usr/local/mysql/data
  8. # 设置MySQL数据库的最大连接数量。
  9. max_connections = 100
  10. # 设置MySQL数据库的连接超时时间。默认设置是一个数据库连接超过8小时没有使用,达到了server端的timeout,服务器将断开这条连接。
  11. wait_timeout = 28800
  12. # 当没有数据库请求时,28800秒(即8小时)将自动断开连接。要同时设置interactive_timeout和wait_timeout才会生效。
  13. interactive_timeout = 28800
  14. #表名存储在磁盘是小写的,但是比较的时候是不区分大小写
  15. lower_case_table_names=1
  16. #日志binlog文件保留天数,默认0永久保留
  17. expire_logs_days=7
  18. socket=/var/lib/mysql/mysql.sock
  19. symbolic-links=0
  20. [mysqld_safe]
  21. log-error=/var/log/mariadb/mariadb.log
  22. pid-file=/var/run/mariadb/mariadb.pid
  23. [client]
  24. socket=/var/lib/mysql/mysql.sock
  25. !includedir /etc/my.cnf.d

2、配置双主从

2.1 配置 /etc/my.cnf

masterA(192.168.111.201) 配置文件

  1. [[email protected]04 mysql]# vi /etc/my.cnf
  2. # 这里我建议可以设置成和服务器ip后缀一致
  3. server-id=201
  4. log-bin=mysql-bin
  5. auto-increment-increment=2
  6. auto-increment-offset=1
  7. log-slave-updates

masterA 重启mysql:

systemctl restart mysql.server

masterB(192.168.111.202) 配置文件

  1. server-id=202
  2. log-bin=mysql-bin
  3. auto-increment-increment=2
  4. auto-increment-offset=2
  5. log-slave-updates

masterB 重启mysql:

systemctl restart mysql.server

auto-increment 两行的配置,
masterA字段产生的数值是 奇数1,3,5,7
masterB 产生的是 2,4,6,8 等
这样会避开双主 id 重复的问题。

auto_increment_increment=2 #步进值auto_imcrement。一般有n台主MySQL就填n
auto_increment_offset=1 #起始值。一般填第n台主MySQL。此时为第一台主MySQL

2.2 添加主从同步账户

让其它主机可以使用slave这个用户账号来登陆master主机的MySQL(如果在授权的用户不存在就会自动创建),
一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.111.202,加强安全

masterA上:

  1. [root@zhdy-04 mysql]# mysql -uroot
  2. # 也就是其它机器可以用 slave 这个账户登录 masterA
  3. mysql>GRANT ALL PRIVILEGES ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';
  4. mysql> flush privileges;

masterB上:

  1. [root@zhdy-04 mysql]# mysql -uroot
  2. # 也就是其它机器可以用 slave 这个账户登录 masterB
  3. mysql>GRANT ALL PRIVILEGES ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';
  4. mysql> flush privileges;

2.3 查看主库的状态

masterA上:

  1. mysql> show master status;
  2. +------------------+----------+--------------+------------------+-------------------+
  3. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
  4. +------------------+----------+--------------+------------------+-------------------+
  5. | mysql-bin.000001 | 208 | | | |
  6. +------------------+----------+--------------+------------------+-------------------+
  7. 1 row in set (0.00 sec)

masterB上:

  1. mysql> show master status;
  2. +------------------+----------+--------------+------------------+-------------------+
  3. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
  4. +------------------+----------+--------------+------------------+-------------------+
  5. | mysql-bin.000001 | 120 | | | |
  6. +------------------+----------+--------------+------------------+-------------------+
  7. 1 row in set (0.00 sec)

这里需要注意的两个bin-log 的名称以及下标,这个很重要,后面需要根据这个判断你从哪里开始同步。

2.4 配置同步信息

masterA上

  1. # MySQL 默认开启了slave 模式,我们需要先把它关掉,配置好后再开启来。(你这里不停止,就执行下面的操作,MySQL也会提示你的)
  2. mysql> stop slave;
  3. # 注意这里的bin-log 文件和 master_log_pos 即bin-log的文件下标,就是上一步masterB的状态数据
  4. mysql> change master to master_host='192.168.111.202',master_port=3306,master_user='slave',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=120;
  5. mysql> start slave;
  6. mysql> show slave status\G
  7. *************************** 1. row ***************************
  8. Slave_IO_State: Waiting for master to send event
  9. Master_Host: 192.168.111.202
  10. Master_User: repl
  11. Master_Port: 3306
  12. Connect_Retry: 60
  13. Master_Log_File: mysql-bin.000001
  14. Read_Master_Log_Pos: 120
  15. Relay_Log_File: zhdy-04-relay-bin.000002
  16. Relay_Log_Pos: 283
  17. Relay_Master_Log_File: mysql-bin.000001
  18. Slave_IO_Running: Yes
  19. Slave_SQL_Running: Yes

masterB上:

  1. # MySQL 默认开启了slave 模式,我们需要先把它关掉,配置好后再开启来。(你这里不停止,就执行下面的操作,MySQL也会提示你的)
  2. mysql> stop slave;
  3. # 注意这里的bin-log 文件和 master_log_pos 即bin-log的文件下标,就是上一步masterA的状态数据
  4. mysql> change master to master_host='192.168.111.201',master_port=3306,master_user='slave',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=208;
  5. mysql> start slave;
  6. mysql> show slave status\G
  7. *************************** 1. row ***************************
  8. Slave_IO_State: Waiting for master to send event
  9. Master_Host: 192.168.111.201
  10. Master_User: repl
  11. Master_Port: 3306
  12. Connect_Retry: 60
  13. Master_Log_File: mysql-bin.000001
  14. Read_Master_Log_Pos: 208
  15. Relay_Log_File: zhdy-05-relay-bin.000002
  16. Relay_Log_Pos: 283
  17. Relay_Master_Log_File: mysql-bin.000001
  18. Slave_IO_Running: Yes
  19. Slave_SQL_Running: Yes

 

2.5 测试

双主模式,在两个数据库中互相操作,则会互相同步。具体操作省略…

主从模式,一旦主节点重启后,可能就无法同步数据,原因是因为 binlog日志不一致了,一旦无法同步 其中的 slave_sql_running,Slave_IO_Running,肯定有一个是有问题的.
双主不会有这个问题

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/1002094
推荐阅读
相关标签
  

闽ICP备14008679号