欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

mysql传统主从配置

程序员文章站 2022-11-17 11:58:15
主从简介 在现代企业中,数据显得尤为重要,而存储数据的数据库选择又五花八门,但无论是何种数据库,均存在着一种隐患。 当数据规模非常大,读写量也很高时,一台数据库已经无法负担全部读写任务,就需要多台数据库同时运作分担负载。 主从作用 实时灾备,用于故障切换 读写分离,提供查询服务 备份,避免影响业务 ......

主从简介

在现代企业中,数据显得尤为重要,而存储数据的数据库选择又五花八门,但无论是何种数据库,均存在着一种隐患。
当数据规模非常大,读写量也很高时,一台数据库已经无法负担全部读写任务,就需要多台数据库同时运作分担负载。

主从作用

  • 实时灾备,用于故障切换
  • 读写分离,提供查询服务
  • 备份,避免影响业务

主从形式

  • 一主一从
  • 主主复制
  • 一主多从(扩展系统读取的性能,读在从库,写在主库)
  • 多主一从(5.7开始支持)
  • 联级复制

主从复制原理

主从复制步骤:

  1. 主库将所有的写操作记录到binlog日志中并生成一个log dump线程,将binlog日志传给从库的i/o线程
  2. 从库生成两个线程,一个i/o线程,一个sql线程
  3. i/o线程去请求主库的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中
  4. sql线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,达到最终数据一致的目的

主从配置

需求:
搭建两台mysql服务器,一台作为主服务器,一台作为从服务器,主服务器进行写操作,从服务器进行读操作

环境:

  • 主数据库
    • centos7/redhat7
    • ip-192.168.233.129
    • hostname-lynk
    • 有数据
  • 副数据库
    • centos7/redhat7
    • ip-192.168.233.247
    • hostname-hyrule
    • 无数据

主从复制配置步骤:

  1. 确保从数据库与主数据库里的数据一样
  2. 在主数据库里创建一个同步账号授权给从数据库使用
  3. 配置主数据库(修改配置文件)
  4. 配置从数据库(修改配置文件)

安装数据库

详情请参考mysql安装

给从库授权

#以下操作在主库进行
mysql> create user 'repl'@'192.168.233.247' identified by 'repl123';
query ok, 0 rows affected (0.00 sec)

mysql> grant replication slave on *.* to 'repl'@'192.168.233.247';
query ok, 0 rows affected (0.00 sec)

确保数据一致

#新开一个终端,对主库锁表,防止配置期间有其他人写入,锁表期间不能关闭终端或退出mysql交互式命令行
mysql> flush tables with read lock;

#全备主库
[root@lynk ~]# mysqldump -uroot -plynk123~ --all-databases > /opt/all-201902271419.sql
#复制备份文件到从库
[root@lynk ~]# scp /opt/all-201902271419.sql root@192.168.233.247:/opt/

#在从库恢复主库的备份
[root@hyrule ~]# mysql -uroot -plynk123~ < /opt/all-201902271419.sql 

配置主库

[root@lynk ~]# vim /etc/my.cnf
#在[mysqld]后添加如下内容(已有的内容不要改变)
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
#启用binlog日志
log-bin=mysql-bin
#数据库服务器唯一标识符,主库的server-id值必须比从库的大
server-id=1
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid 

#结束主库锁表状态,只要退出另一个终端中mysql交互式命令行就行了
mysql> quit

#重启mysql服务
[root@lynk ~]# systemctl restart mysqld

#查看主库状态
[root@lynk ~]# mysql -uroot -plynk123~ -e 'show master status;'
mysql: [warning] using a password on the command line interface can be insecure.
+------------------+----------+--------------+------------------+-------------------+
| file             | position | binlog_do_db | binlog_ignore_db | executed_gtid_set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |    23912 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

配置从库

[root@hyrule ~]# vim /etc/my.cnf
#添加如下内容
server-id=2
relay-log=mysql-relay-bin

#重启从库
[root@hyrule ~]# systemctl restart mysqld

#配置主从复制
mysql> change master to
    -> master_host='192.168.233.129',
    -> master_user='repl',
    -> master_password='repl123',
    -> master_log_file='mysql-bin.000001',
    -> master_log_pos=23912;
query ok, 0 rows affected, 2 warnings (0.04 sec)

mysql> start slave;
query ok, 0 rows affected (0.02 sec)

测试验证

#在主库中新建一个库或表,在从库中查看是否有主库中新建的表