当前位置:   article > 正文

MySQL(V5.7)主从搭建_mysql5.7主从搭建

mysql5.7主从搭建
准备

前话:主从搭建一定要系统一样,MySQL版本一致。

1:首先当然是去MySQL官网下载相应版本的MySQL包,我用的是window 下的MySQL5.7.28。
2:下载后解压后获得mysql-5.7.28-winx64文件夹,这次配置一主一从,所以再复制一份,命名mysql-5.7.28-winx64-slave,作为从节点。
3:MySQL初始化,切换到mysql-5.7.28-winx64/bin执行mysqld --initialize --consolemysqld --initialize-insecure,前者会给root初始化一个随机密码,后者密码为空,这个后者方便。初始化后mysql-5.7.28-winx64下就会出现data目录,原来时没有的。从节点下同样操作。
4:mysql配置文件,一开始是没有my.ini文件的,创建一个,并在主节点添加如下内容:
主要关注【mysqld】模块下的:port、basedir、datadir、server_id和开启二进制日志的几个参数既满足需求了

[client]
port=3306
[mysql]
default-character-set=utf8
#user = root
#password = fpf258310
[mysqld]
port=3306
basedir="E:/mysql-5.7.28-winx64-master/"
datadir="E:/mysql-5.7.28-winx64-master/data/"
character-set-server=utf8
default-storage-engine=INNODB
#支持 INNODB 引擎模式。修改为 default-storage-engine=MyISAM 即可。
#如果 INNODB 模式如果不能启动,删除data目录下ib开头的日志文件重新启动。

sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
max_connections=512

query_cache_size=0
tmp_table_size=18M
thread_cache_size=8
myisam_max_sort_file_size=64G
myisam_sort_buffer_size=35M
key_buffer_size=25M
read_buffer_size=64K
read_rnd_buffer_size=256K
sort_buffer_size=256K
#主从同步配置。主机是1。备机从2开始。
server-id = 1 
#开启二进制日志
log_bin = "E:/mysql-5.7.28-winx64-master/log/mysql-bin" 
log_bin_index = mysql-bin.index
binlog_format = ROW
expire_logs_days = 1
binlog_cache_size=32m
max_binlog_cache_size=512m
max_binlog_size=512m
#binlog_do_db=test
binlog_ignore_db = mysql
#binlog_ignore_db = sys
#binlog_ignore_db = information_schema
#binlog_ignore_db = performance_schema

# 添加慢查询日志
log_output=file
slow_query_log=on
slow_query_log_file = "E:/mysql-5.7.28-winx64-master/log/mysql-slow.log"
log_queries_not_using_indexes=on
long_query_time = 1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

从节点类似,在mysql-5.7.28-winx64-slave下创建 my.ini,并添加如下内容:
主要关注【mysqld】模块下的:port、basedir、datadir、server_id和开启中继日志的几个参数既满足需求了
注意server_id 不能与主节点相同,其取值范围[1,2^32-1]

[client]
port=3307
[mysql]
default-character-set=utf8
[mysqld]
port=3307
basedir="E:/mysql-5.7.28-winx64-slave/"
datadir="E:/mysql-5.7.28-winx64-slave/data/"
character-set-server=utf8
default-storage-engine=INNODB
#支持 INNODB 引擎模式。修改为 default-storage-engine=MyISAM 即可。
#如果 INNODB 模式如果不能启动,删除data目录下ib开头的日志文件重新启动。

sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
max_connections=512

tmp_table_size=18M
thread_cache_size=8
myisam_max_sort_file_size=64G
myisam_sort_buffer_size=35M
key_buffer_size=25M
read_buffer_size=64K
read_rnd_buffer_size=256K
sort_buffer_size=256K
#主从同步配置。主机是1。备机从2开始。
server-id = 2 
#开启中继日志
relay_log="E:/mysql-5.7.28-winx64-slave/log/relay-bin"
#realy_log_index = relay-bin.index
relay_log_purge = 1
relay_log_recovery = 1
max_relay_log_size = 500M
sync_relay_log =0
sync_relay_log_info = 0
#replicate-do-db = test
#replicate-ignore-db = mysql #基于库过滤数据,会数据不一致问题
replicate_wild_ignore_table =mysql.% #基于表过滤数据,更安全
replicate_wild_ignore_table =sys.%
replicate_wild_ignore_table =information_schema.%
replicate_wild_ignore_table =performance_schema.%
# 添加慢查询日志
log_output=file
slow_query_log=on
slow_query_log_file = "E:/mysql-5.7.28-winx64-slave/log/mysql-slow.log"
log_queries_not_using_indexes=on
long_query_time = 2
#innodb
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=1M
innodb_buffer_pool_size=47M
innodb_log_file_size=24M
innodb_file_per_table=1
innodb_thread_concurrency=8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53

至于二进制和中继日志各自的作用,可看这两篇文章二进制日志中继日志。简单地说要完成主从复制,主节点需要开启二进制日志,从节点需要开启中继日志,二进制日志文件用于保存节点自身产生的事件,中继日志文件中则是保存接收自其他节点的事件(也是二进制格式)。

进行时

切到mysql-5.7.28-winx64/bin下,执行mysqld启动主节点服务,再执行mysql -u root -p进入,创建用于主从复制的账号,如下:

 create user 'repl3307'@'127.0.0.1' identified by 'repl3307';
 grant REPLICATION SLAVE ON *.* TO 'repl3307'@'127.0.0.1';
 flush privileges;//分配复制权限
  • 1
  • 2
  • 3

切到mysql-5.7.28-winx64-slave/bin下,执行mysqld启动主节点服务,再执行mysql -u root -p进入,执行下面命令:

show slave status;//查看从节点状态
change master to master_host='127.0.0.1',master_port=3306,master_user='repl3307',master_password='repl3307',master_log_file='mysql-bin.000001',master_log_pos=0;
start slave;//开启数据同步 stop slave可关闭同步
show slave status;//查看从节点状态是否有问题
  • 1
  • 2
  • 3
  • 4

通过show slave status;查看状态正常,则在主节点进行 写 操作,都会同步到从节点。

双主如何搭建呢?其实很简单,将上面master和slave的操作反顾来来一遍,使二者可互相同步数据就可以了

其他注意点

主从搭建分两种情况:1:主节点没有任何数据,增加从节点即可,数据即可一致。
2:主节点已经有数据,突然增加一个从节点,这是需要将主节点已有数据导入到从节点,再进行主从同步,保证数据的一致性,不然同步时可能出问题。
从这里可以看出,与全量备份(数据恢复)和增量备份(数据恢复)有关系了
全量备份:

mysqldump -u root -p=xxx --all-databases > backup.sql;//导出目前全部数据
mysqldump -u root -p=xxx test > backup.sql;//导出指定库的数据
  • 1
  • 2

把带出来的文件再导入到从节点就好了。

复制延迟问题

MySQL复制延迟问题一直被人们诟病,但这个问题是无法彻底消除的,能做的只有尽量降低延迟,如果业务无法容忍延迟,就不要使用主从读写分离。
主从复制流程图
从图中可以了解,延迟的产生主要有两个原因:

  1. 从节点从主节点拉数据时的网络延迟;
  2. 主库写了,从库写没有跟上。
  3. 从库所在服务器硬件升级,比如cpu,内存等

1和3不是我们程序员解决的,这里主要说下第二点。
MySQL配置参数上来说:
对主节点:innodb_flush_log_at_trx_commit = 2//mysql默认是1,调整前,请了解该参数作用,判断业务是否需要
sync_binlog = n;该参数确定写入binlog的频率,默认0,即由操作系统决定。n=1是最安全,但最慢,可以根据业务适当调大。
对从节点:sync_relay_log = n;它的作用于sync_binlog类似。
MySQL主从复制方式
可以配置并行复制方式(MySQL默认是异步复制方式),可以并发执行,是目前最好的方案,不过MySQLV5.7才很好的实现它。具体配置如下,从节点配置:

# slave
 slave-parallel-type=LOGICAL_CLOCK #基于组提交的并行复制方式,默认值 DATABASE:基于库的并行复制方式
 slave-parallel-workers=16 #并发数,最佳实践16个,再多对性能提升不大
 master_info_repository=TABLE
 relay_log_info_repository=TABLE
 relay_log_recovery=ON
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

参考:

1】mysql5.7主从复制原理及基本配置
2】MySQL 5.7并行复制时代

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

闽ICP备14008679号