主从同步、读写分离、mysql性能调优(软优化)

配置mysql主从同步
1 主从同步的作用:让slave身份的数据库服务器自动同步

master身份的数据库服务器上的数据。

一、主数据库服务器的配置192.168.4.12
1 用户授权
mysql> grant replication slave on *.* to

[email protected]"192.168.4.11" identified by "123456";
2 启用binlog日志
vim /etc/my.cnf
[mysqld]
server_id=12
log_bin=master12
binlog_format="mixed"
:wq
#systemctl stop mysqld
#systemctl start mysqld
#ls /var/lib/mysql/master12.*
#mysql -uroot -p123456
mysql> show master status;

二 、从数据库服务器的配置192.168.4.11
1 验证主库的授权用户
#ping 192.168.4.12
#mysql -h192.168.4.12 -uslaveuser -p123456
mysql> show grants;

2 修改配置文件指定server_id
vim /etc/my.cnf
[mysqld]
server_id=11
:wq

#systemctl stop mysqld
#systemctl start mysqld

3 设置自己是那台主机的从库
#mysql -uroot -p123456
mysql> show slave status;
mysql> change master to

master_host="192.168.4.12",
master_user="slaveuser",
master_password="123456",
master_log_file="master12.000001",
master_log_pos=154;
mysql>show slave status\G;
mysql> start slave;
mysql>show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

三测试主从同步配置
客户端访问主库时 产生的数据在从库上都可以看的到。

从库暂时不同步主库的数据
mysql> stop slave;

把从库恢复为独立的数据库服务器
#rm -rf master.info localhost-relay-bin.* relay-

log.info
#systemctl stop mysqld ; systemctl start mysqld

四、主从同步工作过程
cd /var/lib/mysql/
master.info 连接主库信息
localhost-relay-bin.000001 中继日志文件
localhost-relay-bin.index 日志索引文件
relay-log.info 中继日志信息

IO线程 :负责把主库binlog里的sql命令保存到本机的中继日

志文件里。

报错原因: 连接不上主库服务器(ping selinux firewalld

grant binlog日志指定错误)

Last_IO_Error: 报错信息

解决错误
mysql> stop slave;
mysql> change master to 选项=值,选项=值;
mysql> start slave;

SQL线程:执行本机中继日志文件里的sql命令把数据写进库里


报错原因:本机没有执行日志文件里sql命令时,使用的库或表

Last_SQL_Error: 报错信息

解决办法:让从库有主库比自己多的数据,然后 stop slave ;start slave;
++++++++++++++++++++++++++++++++++
五、主从同步结构
一主一从 *
一主多从 *
主从从
主主结构(互相主从)
++++++++++++++++++++++++++++++++++++
主从同步配置常用参数
vim /etc/my.cnf
/etc/my.cnf
[mysqld]
....
:wq
#systemctl restart mysqld
#mysql>show master status;

主数据服务器使用的参数
binlog_do_db=db1,db2 只允许同步本机库1和库2
binlog_ignore_db=db1,db2 只不允许同步本机库1和库2

从数据服务器使用的参数
log_slave_updates 允许级联复制(主从从)
replicate_do_db=db1,db2 只同步库1和库2
replicate_ignore_db=db1,db2 只不同步库1和库2
relay_log=名 指定中继日志文件名

五、mysql读写分离 (第三方软件 + 主从同步)
1 什么读写分离:把不同操作给不同的数据库服务器处理
2 为什么要做读写分离:减轻服务器的并发访问压力同时提高硬

件利用率。

实现读写分离
第三方软件 :有很多 统称mysql中间件 不同的中间件软件有不

同的功能,大多数都是开源 (mysql-proxy mysql-mmm

mycat maxscale*)

主从同步结构(一主一从 )
要求:把数据库服务器11 配置为数据库服务器12的从服务器。

1、配置12
1.1 用户授权
1.2 启用binlog日志

2、配置11
2.1 测试授权用户
2.2 设置server_id
2.3 管理员帐号登录,设置自己为12的从数据库服务器
2.4 查看IO线程和SQL线程的状态

3、在客户端测试主从同步配置
3.1 在主数据库服务器上添加对数据有访问权限的用户
mysql> grant all on bbsdb.* to [email protected]"%"

identified by "123456";
mysql> create database bbsdb;

使用主数据库服务器上授权用户连接主数据库服务器,建库,建

表,连接从数据库时,也能够看到新创建的库和表。
#mysql -h192.168.4.12 -uwebadmin -p123456

3 配置实现读写分离功能的服务器(13)
3.1 能够和2台数据库服务器通信
#ping 192.168.4.11/12
3.2 安装软件maxscale-2.1.2-1.rhel.7.x86_64.rpm
#rpm -ivh maxscale-2.1.2-1.rhel.7.x86_64.rpm(根据提示

安装依赖包)
#rpm -ql maxscale
#rpm -qc maxscale

3.3 修改配置文件
# grep -v ‘#‘ /etc/maxscale.cnf.template >

/etc/maxscale.cnf

[[email protected] ~]# cat /etc/maxscale.cnf
[maxscale]
threads=1

[server1]
type=server
address=192.168.4.11
port=3306
protocol=MySQLBackend

[server2]
type=server
address=192.168.4.12
port=3306
protocol=MySQLBackend

[MySQL Monitor]
type=monitor
module=mysqlmon
servers=server1,server2
user=scalemon
passwd=111111
monitor_interval=10000

[Read-Write Service]
type=service
router=readwritesplit
servers=server1,server2
user=maxscale
passwd=111111
max_slave_connections=100%

[MaxAdmin Service]
type=service
router=cli

[Read-Write Listener]
type=listener
service=Read-Write Service
protocol=MySQLClient
port=4006

[MaxAdmin Listener]
type=listener
service=MaxAdmin Service
protocol=maxscaled
socket=default
port=4008
[[email protected] ~]#

[maxscale] 定义服务运行时启动的线程数量
[server数字] 定义数据库服务器ip地址
[MySQL Monitor] 定义监控成员列表
[Read-Write Service]定义读写分离主机列表
[MaxAdmin Service] 定义管理服务
[Read-Write Listener]定义读写分离服务使用的端口
[MaxAdmin Listener]定义管理服务使用的端口

根据配置文件里设置,在数据库服务器上添加对应的授权用户
mysql>grant replication slave, replication client on *.*

to [email protected]‘%‘ identified by “111111”;

mysql> grant select on mysql.* to [email protected]‘%‘

identified by "111111";

3.4 启动服务
# maxscale -h
# maxscale -f /etc/maxscale.cnf
[[email protected] ~]# netstat -utnalp | grep maxscale
tcp 0 0 192.168.4.13:39870 192.168.4.12:3306

ESTABLISHED 12412/maxscale
tcp 0 0 192.168.4.13:32980 192.168.4.11:3306

ESTABLISHED 12412/maxscale
tcp6 0 0 :::4008 :::* LISTEN

12412/maxscale
tcp6 0 0 :::4006 :::* LISTEN

12412/maxscale
[[email protected] ~]#

在本机连接管理端口查看监控主机的状态
[[email protected] ~]# maxadmin -P 4008 -pmariadb
MaxScale> list servers
Servers.
-------------------+-----------------+-------+-------------

+--------------------
Server | Address | Port | Connections |

Status
-------------------+-----------------+-------+-------------

+--------------------
server1 | 192.168.4.11 | 3306 | 0 | Slave,

Running
server2 | 192.168.4.12 | 3306 | 0 | Master,

Running
-------------------+-----------------+-------+-------------

+--------------------
MaxScale> list ser
Unknown or missing option for the list command. Valid

sub-commands are:
clients List all clients
dcbs List all DCBs
filters List all filters
listeners List all listeners
modules List all currently loaded modules
monitors List all monitors
services List all the services
servers List all servers
sessions List all sessions
threads List polling threads
commands List registered commands
MaxScale> quit

4 在客户端测试读写分离
mysql -h192.168.4.13 -P 4006 -uwebadmin -

p123456
mysql> select * from bbsdb.a;
insert insert into bbsdb.a values(1001);

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
mysql性能调优(软优化)
维护的数据库服务器响应客户端请求慢,可能是什么原因导致的?
1.1网络带宽窄(使用网络测速软件)

1.2服务器硬件配置过低(CPU 内存 存储)
使用命令或监控软件监视 使用情况 (top free -m )

1.3提供数据库服务软件版本低
如何知道是否是软件版本低,查看服务运行时的参数信息
/etc/my.cnf
[mysqld]
变量名=值
:wq

#mysql -uroot -p123456
查看参数值
mysql> show variables like "%timeout%";
mysql> show variables like "connect_timeout";

修改参数值
mysql> set 变量名=值;
mysql> set global 变量名=值;

mysql> SET GLOBAL connect_timeout=5;

常用变量的设置:
1 并发连接数 max_connections
mysql> show processlist

mysql> show global status like "max_used_connections";

max_used_connections/max_connections=0.85

2建立连接3次握手超时时间
connect_timeout

3 连接建立后,关闭某个不活动连接的超时时间
wait_timeout 28800

4 线程数量:允许保存在缓存中被重用的线程数量
thread_cache_size

5 为所有线程缓存的打开的表的数量
table_open_cache

6 与查询缓存相关的参数

select * from t1; read_buffer_size

select * from t1 where name like "a%"; key_buffer-size
seletct * from t1 group by sex; read_rnd_buffer_siz
seletct * from t1 order by 成绩; sort_buffer_size

查询优化
阐述mysql数据服务器处理查询请求的过程?

mysql> show variables like "query_cache%";
query_cache_type=0/1/2

0 不允许存
1 无条件存储
2 要设置把查询结果记录到查询缓存里才存储

select in_sql_cache * from t1;

query_cache_wlock_invalidate off
myisam存储引擎的表

pc1 select name from t1 where name="jim"
name="jim"

pc2 select name from t1 where name="jim";
pc3 update t1 set name="tom" where name="jim";

显示查询缓存统计信息
mysql> show global status like "qcache%";
Qcache_hits 30
Qcache_inserts 100
Qcache_lowmem_prunes 10
Qcache_not_cached

1.4 程序员访问数据的sql命令复杂导致处理速度慢
mysql数据库服务启用慢查询日志 ,记录客户端连接后服务后,

超过指定时间显示查询结果sql命令。

mysql数据库服务的日志类型?
错误日志 binlog日志 查询日志 慢查询日志
默认启用的

vim /etc/my.cnf
[mysqld]
选项
:wq
#systemctl stop mysqld;
#systemctl start mysqld;

错误日志:记录服务在启动和运行过程中产生的错误信息
log-error=/var/log/mysqld.log

查询日志 :记录客户端连接后服务后,执行的所有sql命令。
[mysqld]
general-log

cat /var/lib/mysql/主机名.log

慢查询日志:记录客户端连接后服务后,超过指定时间显示查询结果sql命令。

[mysqld]
slow-query-log

mysql> select sleep(11);
# cat /var/lib/mysql/主机名-slow.log
#mysqldumpslow /var/lib/mysql/主机名-slow.log > /tmp/sql.txt

1.5 网络结构不合理

原文地址:https://www.cnblogs.com/fuzhongfaya/p/8952872.html

时间: 2025-01-31 07:44:45

主从同步、读写分离、mysql性能调优(软优化)的相关文章

MySQL性能调优(软调优)

基于一台普通版的MySQL服务器 目的:加快服务器的响应速度 进程数=进程*线程 1.Mysql的查询过程 1)客户端向服务器发送连接请求 2)服务器端(连接池)开辟线程响应用户请求 3)用户发起sql语句查询数据库select * from db.a; 4)查询缓存:记录用户的sql执行语句和查询结果 2.加快Mysql服务器的运行速度  1)替换有问题的硬件(最有效的方法) 如:CPU.内存.硬盘  2)对Mysql进程的设置进行调优    A.并发数      优化mysql数据库的性能参

实现MySQL读写分离,MySQL性能调优

实现MySQL读写分离 1.1 问题 本案例要求配置2台MySQL服务器+1台代理服务器,实现MySQL代理的读写分离: 用户只需要访问MySQL代理服务器,而实际的SQL查询.写入操作交给后台的2台MySQL服务器来完成 其中Master服务器允许SQL查询.写入,Slave服务器只允许SQL查询 1.2 方案 使用4台RHEL 7.2虚拟机,如图-1所示.其中192.168.4.10.192.168.4.20分别作为MySQL主.从服务器,是整个服务的后端:另一台 192.168.4.100

Database基础(六):实现MySQL读写分离、MySQL性能调优

一.实现MySQL读写分离 目标: 本案例要求配置2台MySQL服务器+1台代理服务器,实现MySQL代理的读写分离: 用户只需要访问MySQL代理服务器,而实际的SQL查询.写入操作交给后台的2台MySQL服务器来完成 其中Master服务器允许SQL查询.写入,Slave服务器只允许SQL查询 方案: 使用4台RHEL 7.2虚拟机,如下图所示.其中192.168.4.10.192.168.4.20分别作为MySQL主.从服务器,是整个服务的后端:另一台 192.168.4.100作为MyS

MySQL性能调优与架构设计——第 17 章 高可用设计之思路及方案

第 17 章 高可用设计之思路及方案 前言: 数据库系统是一个应用系统的核心部分,要想系统整体可用性得到保证,数据库系统就不能出现任何问题.对于一个企业级的系统来说,数据库系统的可用性尤为重要.数据库系统一旦出现问题无法提供服务,所有系统都可能无法继续工作,而不像软件中部分系统出现问题可能影响的仅仅只是某个功能无法继续服务.所以,一个成功的数据库架构在高可用设计方面也是需要充分考虑的.本章内容将针对如何构建一个高可用的 MySQL 数据库系统来介绍各种解决方案以及方案之间的比较. 17.1 利用

MySQL性能调优与架构设计——第 14 章 可扩展性设计之数据切分

第 14 章 可扩展性设计之数据切分 前言 通过 MySQL Replication 功能所实现的扩展总是会受到数据库大小的限制,一旦数据库过于庞大,尤其是当写入过于频繁,很难由一台主机支撑的时候,我们还是会面临到扩展瓶颈.这时候,我们就必须许找其他技术手段来解决这个瓶颈,那就是我们这一章所要介绍恶的数据切分技术. 14.1 何谓数据切分 可能很多读者朋友在网上或者杂志上面都已经多次见到关于数据切分的相关文章了,只不过在有些文章中称之为数据的 Sharding.其实不管是称之为数据的 Shard

[转]MySQL性能调优与架构设计——第11章 常用存储引擎优化

第11章 常用存储引擎优化 前言: MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.每一种存储引擎都有各自的特长,也都存在一定的短处.如何将各种存储引擎在自己的应用环境中结合使用,扬长避短,也是一门不太简单的学问.本章选择最为常用的两种存储引擎进行针对性的优化建议,希望能够对读者朋友有一定的帮助. 11.1 MyI SAM存储引擎优化 我们知道,MyISAM存储引擎是MySQL最为古老的存储引擎之一,也是最为流行的存储引擎之一.对

MySQL性能调优与架构设计——第11章 常用存储引擎优化

第11章 常用存储引擎优化 前言: MySQL 提供的非常丰富的存储引擎种类供大家选择,有多种选择固然是好事,但是需要我们理解掌握的知识也会增加很多.每一种存储引擎都有各自的特长,也都存在一定的短处.如何将各种存储引擎在自己的应用环境中结合使用,扬长避短,也是一门不太简单的学问.本章选择最为常用的两种存储引擎进行针对性的优化建议,希望能够对读者朋友有一定的帮助. 11.1 MyI SAM存储引擎优化 我们知道,MyISAM存储引擎是MySQL最为古老的存储引擎之一,也是最为流行的存储引擎之一.对

MySQL性能调优与架构设计——第 18 章 高可用设计之 MySQL 监控

第 18 章 高可用设计之 MySQL 监控 前言: 一个经过高可用可扩展设计的 MySQL 数据库集群,如果没有一个足够精细足够强大的监控系统,同样可能会让之前在高可用设计方面所做的努力功亏一篑.一个系统,无论如何设计如何维护,都无法完全避免出现异常的可能,监控系统就是根据系统的各项状态的分析,让我们能够尽可能多的提前预知系统可能会出现的异常状况.即使没有及时发现将要发生的异常,也要在异常出现后的第一时间知道系统已经出现异常,否则之前的设计工作很可能就白费了. 18.1 监控系统设计 系统监控

mysql性能调优工具之mytop

Mysql性能调优工具之mytop 的安装和使用 1.       mytop 的下载地址 http://yunpan.cn/cVG3uSs2Jtt9h  访问密码 7ef1 2.       首先安装mytop必要的组件 .   yum -y install perl-DBD-MySQL perl-DBIperl-TermReadKey 如果提示找不到安装包,可以先安装 Yum –y install  epel-release epel-release 这个可以使用到最新的yum源. 如果安装