一、docker内搭建MySQL主从
1、为什么搭建主从服务
引入问题:springboot的最大请求量是多少?(单tomcat)
多服务器(mysql)协同工作解决大量请求问题。-----分布式
CAP理论:CAP:C:数据一致性 A:高可用性----主从、集群 P:分区容错性
2、原理:(一主一从)
采用创建两个docker容器扮演主(master)从(slave)
~ 请求mysql在book_tab添加一条数据insert
~ master:执行sql,写入到binlog---二进制文件,记录master的数据库操作
~ slave:开启IO线程读取binlog文件
~ slave:开启写线程写入slave服务器的Relaylog文件中
~ slave:开启SQL线程,读取relaylog中的数据,更新slave数据库中的内容
~ slave:也添加了一条数据。
3、关于binlog
show binary logs; 显示所有日志文件
show binlog events in 'binlog.000001'; 查询binlog日志
show variables like 'log_bin'; 查看日志是否启用
show variables like '%datadir%'; 查看binlog位置
4、主从服务器的搭建
搭建主(master)服务器(docker 容器)
docker run -it \
--name mysql_3306 \
--privileged \
--network wn_docker_net \
--ip 172.18.12.2 \
-p 3306:3306 \
-v /usr/local/softwares/mysql/3306/conf/my.cnf:/etc/mysql/my.cnf \
-v /usr/local/softwares/mysql/3306/data:/var/lib/mysql \
-v /usr/local/softwares/mysql/3306/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=123 \
-d mysql
如遇到防火墙问题
firewall-cmd --add-ports=3306/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-ports
搭建从(slave)服务器(docker容器)
docker run -it \
--name mysql_3310 \
--privileged \
--network wn_docker_net \
--ip 172.18.12.3 \
-p 3310:3306 \
-v /usr/local/softwares/mysql/3310/conf/my.cnf:/etc/mysql/my.cnf \
-v /usr/local/softwares/mysql/3310/data:/var/lib/mysql \
-v /usr/local/softwares/mysql/3310/mysql-files:/var/lib/mysql-files \
-e MYSQL_ROOT_PASSWORD=123 \
-d mysql
master创建用户slave进行主从关联
create user 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123';
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'%';
flush privileges;
进入slave容器,连接mysql
change master to master_host='172.18.12.2',
master_user='slave',master_password='123',
MASTER_LOG_FILE='wnhz-master-logbin.000002',
MASTER_LOG_POS=157;
4.1从数据库依然能够写数据
从服务器使用root用户登录
创建一个用户做“从”处理,权限只能是读的操作
create user 'sd'@'%' IDENTIFIED WITH mysql_native_password BY '123';
GRANT SELECT ON *.* TO 'sd'@'%';
flush privileges;
配置主从关系的时候遇到非两个yes时
1、关闭slave
stop slave;
2、重置slave:replaylog
reset slave;
3、重新配置change to
(1)show master status;
(2)如下:
change master to master_host='172.18.12.2',
master_user='slave',
master_password='123',
MASTER_LOG_FILE='wnhz-master-logbin.000002',
MASTER_LOG_POS=157;
4、重新运行slave
start slave;
二、知识延申
1、如何创建用户并给用户授权?
使用root登录到mysql
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
用需要创建的用户名替换username,localhost表示该用户只能从本地连接访问数据库
使用grant语句为用户授予适当的权限
GRANT privilege1, privilege2 ON database_name.table_name TO 'username'@'localhost';
privilege1, privilege2替换为想要授予的具体权限:select,insert,update,delete等
database_name.table_name 替换为要给予权限的数据库和表名
'username'@'localhost' 是上述创建的用户名。如果要赋予所有权限,执行如下:
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';
执行完后一定要刷新权限:FLUSH PRIVILEGES;
2、tomcat的最大连接数取决于什么 详细分析
Tomcat的最大连接数不仅取决于Tomcat自身的配置,还受限于硬件资源、系统限制、应用程序负载和数据库连接池管理等个因素。在调整最大连接数之前,需综合考虑这些因素,并进行实际测试和评估,以确保系统的稳定性和性能。
-
硬件资源:Tomcat的最大连接数受限于服务器的硬件资源,例如CPU处理能力、内大小和网络带宽等。较高的硬件配置能够支持更多的并发连接。
-
操作系统限制:操作系统对每个进程或线程的连接数也有限制。例如,对于Linux系统,连接数可以通过
ulimit
命令进行设置。Tomcat的最大连接数不能超过操作系统的限制。 -
Tomcat的配置:Tomcat的配置文件(通常是server.xml)中有一些属性可以调整最大连接数包括
maxThreads
(最大线程数)和maxConnections
最大连接数)。这些属性可以根据实际需求进行调整。(------默认为200------) -
应用程序负载:最大连接数还受到应用程序的负载影响。如果应用程序中存在较多的数据库查询或其他耗时操作,连接数可能需要相应调整以满足服务质量要求。
-
数据库连接池管理:如果应用程序使用数据库连接池来管理数据库连接,最大连接数也受连接池的配置限制。连接池的配置参数可以根据需求进行调整,以适应并发连接数的需求.
3、mysql数据库支持的每秒中最大访问量取决于什么
MySQL数据库的每秒最大访问量不是一个固定的数字,而是受多个因素的综合影响。最大访问量可以通过优化硬件资源、数据库设计、优化和性能调整等手段进行提高。针对具体的应用场景,需要综合考虑以上因素并进行合理调整,以满足系统的性能需求。
-
硬件资源:MySQL数据库的性能和每最大访问量受制于服务器的硬件资源,如CPU处理能力、内存大小、磁盘I/O速度和网络带宽等。更高配置的硬件通常能够支持更大的访问量。
-
数据库设计和索引:合理的数据库体系结构设计和索引的使用能提高查询性能和响应速度。优化表结构、选择适当的数据类型、创建适当的索引等操作能显著影响每秒最大访问量。
-
查询的复性:查询的复杂性对MySQL的性能和每秒最大访问量有直接影响。较简单的查询(例如基于索引的查询)通常能够更快地执行和处理更多的请求,而复杂的查询可能需要更长的时间,从而限制了每秒访问量。
-
查询优化和性能调整:使用合理的查询优化技术和调整MySQL的参数也是提高最大访问量的重要因素。根据具体情况,可以修改MySQL的缓冲区大小、并发连接数、缓存等参数,以最大限度地提高性能和吞吐量。
-
数据库缓存和查询缓存:启用MySQL的查询缓存和数据库缓存可以显著减少从磁盘读取数据的次数,提高查询响应速度和每秒最大问量。
-
并发访问:并发访问是指多个用户同时请求数据库资源的情况。MySQL的每秒最大访问量受限于数据库管理系统的并发处理能力。通过合理设计数据库结构、优化查询和使用连接池等手段,可以提高并发访问的性能和每秒最大访问量。