-
CentOS7系统下搭建MySQL(8.0.16)主从环境
默认情况下,复制是异步的,从站不需要永久连接以接收来自主站的更新。根据配置,您可以复制数据库中的所有数据库,所选数据库甚至选定的表。 MySQL中复制的优点包括: 横向扩展解决方案 - 在多个从站之间分配负载以提高性能。在此环境中,所有写入和更新都必须在主服务器上进行。但是,读取可能发生在一个或多个从站上。该模型可以提高写入性能(因为主设备专用于更新),同时显着提高了越来越多的从设备的读取速度。 数据安全性 - 因为数据被复制到从站,并且从站可以暂停复制过程,所以可以在从站上运行备份服务而不会破坏相应的主数据。 分析 - 可以在主服务器上创建实时数据,而信息的分析可以在从服务器上进行,而不会影响主服务器的性能。 远程数据分发 - 您可以使用复制为远程站点创建数据的本地副本,而无需永久访问主服务器。 1.官网下载安装包 https://dev.mysql.com/downloads/mysql/ 压缩包有如下内容: 说明: 标准安装:安装 mysql-community-server, mysql-community-client, mysql-community-libs, mysql-community-common,和 mysql-community-libs-compat包。 标准安装之后的文件布局如下: 2.开始安装 把文件上传到服务器,解压。 [root@localhost soft]# mkdir mysql8 [root@localhost soft]# tar -xvf mysql-8.0.16-1.el7.x86_64.rpm-bundle.tar -C /soft/mysql8/ 然后进入解压目录安装: 选择y,最后出现Complete! 两台全部安装完后,进行配置。 3.基于二进制日志文件位置的复制 传统方法基于master的二进制日志复制事件,并要求其中的日志文件和位置在master和slave之间同步。 1. 打开主服务器。去修改配置文件,设置日志文件名称和服务器ID,以及需要复制的数据库 [root@localhost mysql8]# vim /etc/my.cnf 2. 打开从服务器,配置服务器ID 3. 配置……
SE_Zhang 2024-04-238 0 0 -
mysql数据库导入sql文件时提示“Error Code: 1153 – Got a packet bigger than ‘max_allowed_packet’ bytes”解决办法
向mysql数据库中导入sql文件时,如果文件过大(几百M),会提示“Error Code: 1153 - Got a packet bigger than 'max_allowed_packet' bytes” 1.查看目前数据库配置 show VARIABLES like '%max_allowed_packet%'; 显示如下结果 +--------------------+---------+ | Variable_name | Value | +--------------------+---------+ | max_allowed_packet | 1048576 | +--------------------+---------+ 说明目前的配置是:1048576/1024/1024 = 1M 2.修改my.ini文件中“max_allowed_packet”的值 路径在mysql的安装目录中 3.修改后,重启mysql服务 在cmd窗口下,先执行net stop mysql;再执行net start mysql 然后再到sqlyog中执行show VARIABLES like '%max_allowed_packet%';发现值已更改
SE_Zhang 2024-04-1966 0 0 -
不停止MySQL服务增加从库的两种方式
简介: 现在生产环境MySQL数据库是一主一从,由于业务量访问不断增大,故再增加一台从库。前提是不能影响线上业务使用,也就是说不能重启MySQL服务,为了避免出现其他情况,选择在网站访问量低峰期时间段操作。 一般在线增加从库有两种方式,一种是通过mysqldump备份主库,恢复到从库,mysqldump是逻辑备份,数据量大时,备份速度会很慢,锁表的时间也会很长。另一种是通过xtrabackup工具备份主库,恢复到从库,xtrabackup是物理备份,备份速度快,不锁表。为什么不锁表?因为自身会监控主库日志,如果有更新的数据,就会先写到一个文件中,然后再回归到备份文件中,从而保持数据一致性。 服务器信息: 主库:192.168.18.212(原有) 从库1:192.168.18.213(原有) 从库2:192.168.18.214(新增) 数据库版本:MySQL5.5 存储引擎:Innodb 测试库名:weibo 一、mysqldump方式 MySQL主从是基于binlog日志,所以在安装好数据库后就要开启binlog。这样好处是,一方面可以用binlog恢复数据库,另一方面可以为主从做准备。 原有主库配置参数如下: vi my.cnf server- id = 1 #id要唯一 log-bin = mysql-bin #开启binlog日志 auto-increment-increment = 1 #在Ubuntu系统中MySQL5.5以后已经默认是1 auto-increment-offset = 1 slave-skip-errors = all #跳过主从复制出现的错误 1. 主库创建同步账号 grant all on *.* to 'sync' @ '192.168.18.%' identified by 'sync' ; 2. 从库配置MySQL vi my.cnf server- id = 3 #这个设置3 log-bin = mysql-bin #开启binlog日志 auto-increment-increment = 1 #这两个参数在Ubuntu系统中MySQL5.5以后都已经默认是1 auto-increment-offset = 1 slave-skip-errors = all #跳过……
SE_Zhang 2024-04-1720 0 0 -
MySQL优化之show processlist命令详解
SHOW PROCESSLIST 显示哪些线程正在运行 不在mysql提示符下使用时用mysql -uroot -e 'show processlist' 或者mysqladmin processlist 如果您有root权限,您可以看到所有线程。否则,您只能看到登录的用户自己的线程,通常只会显示100条如果想看跟多的可以使用full修饰(show full processlist) 参数 id #ID标识,要kill一个语句的时候很有用 use #当前连接用户 host #显示这个连接从哪个ip的哪个端口上发出 db #数据库名 command #连接状态,一般是休眠(sleep),查询(query),连接(connect) time #连接持续时间,单位是秒 state #显示当前sql语句的状态 info #显示这个sql语句 其中state的状态十分关键,下表列出state主要状态和描述: 状态 描述 Checking table 正在检查数据表(这是自动的)。 Closing tables 正在将表中修改的数据刷新到磁盘中,同时正在关闭已经用完的表。这是一个很快的操作,如果不是这样的话,就应该确认磁盘空间是否已经满了或者磁盘是否正处于重负中。 Connect Out 复制从服务器正在连接主服务器。 Copying to tmp table on disk 由于临时结果集大于tmp_table_size,正在将临时表从内存存储转为磁盘存储以此节省内存。 Creating tmp table 正在创建临时表以存放部分查询结果。 deleting from main table 服务器正在执行多表删除中的第一部分,刚删除第一个表。 deleting from reference tables 服务器正在执行多表删除中的第二部分,正在删除其他表的记录。 Flushing tables 正在执行FLUSH TABLES,等待其他线程关闭数据表。 Killed 发送了一个kill请求给某线程,那么这个线程将会检查kill标志位,同时会放弃下一个kill请求。MySQL……
SE_Zhang 2024-04-1613 0 0 -
MYSQL解锁与锁表
MySQL锁概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking);BDB存储引擎采用的是页面锁(page-level locking),但也支持表级锁;InnoDB存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下是采用行级锁。 MySQL这3种锁的特性可大致归纳如下 开销、加锁速度、死锁、粒度、并发性能 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。 MyISAM表锁 MyISAM存储引擎只支持表锁,这也是MySQL开始几个版本中唯一支持的锁类型。随着应用对事务完整性和并发性要求的不断提高,MySQL才开始开发基于事务的存储引擎,后来慢慢出现了支持页锁的BDB存储引擎和支持行锁的InnoDB存储引擎(实际 InnoDB是单独的一个公司,现在已经被Oracle公司收购)。但是MyISAM的表锁依然是使用最为广泛的锁类型。本节将详细介绍MyISAM表锁的使用。 查询表级锁争用情况 可以通过检查table_locks_waited和table_locks_immediate状态变量来分析系统上的表锁定争夺: mysql> show status like 'table%'; +-------------------------------+-------+ | Variable_name | Value | +-------------------------------+-------+ | Table_locks_immediate | 2979 | | Table_locks_waited | 0 | +-------------------------------+-------+ 2 rows in set (0.00 sec)) 如果Table_locks_waited的值比较高,则说明存在着较严重的表级……
SE_Zhang 2024-04-1513 0 0 -
mysql锁表查询和解锁操作
mysql锁表查询和解锁操作 1、在做数据库操作时,有时会因为自己的粗心或者程序设计上的缺陷导致锁表,在mysql中查看锁表和解锁的步骤如下: //1.查看当前数据库锁表的情况 SELECT * FROM information_schema.INNODB_TRX; //2.杀掉查询结果中锁表的trx_mysql_thread_id kill trx_mysql_thread_id 2、另外一种查询锁方法 1、查询是否锁表 show OPEN TABLES where In_use > 0; 2、查询进程 show processlist 查询到相对应的进程===然后 kill id 补充: 查看正在锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; 查看等待锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;
SE_Zhang 2024-04-1223 0 0 -
mysql 查看表数据大小条数
mysql的information_schema库重 tables存储了数据表的元数据信息,下面是其中几个字段的含义: table_schema: 记录数据库名; table_name: 记录数据表名; table_rows: 关于表的粗略行估计; data_length : 记录表的大小(单位字节); index_length : 记录表的索引的大小; 要查看表的大小,条数,可以查data_length,table_rows select TABLE_NAME, concat(truncate(data_length/1024/1024,2),' MB') as data_size,table_rows from information_schema.tables where TABLE_SCHEMA = 'dbName' and TABLE_NAME in ("tableName1","tableName2")
SE_Zhang 2024-04-1112 0 0 -
mysql主从赋值,从机验证报错:ERROR 3021(HY000):this operation cannot be performed with a running salve io thread
原因: mysql从机上已经进行过绑定了,如果继续绑定需要先进行重置。 解决办法 1、停止已经启动的绑定 stop slave 2、重置绑定 reset master 3、执行复制主机命令 change master to master_host = '192.168.12.1' master_user = 'slave' ,master_password ='123456' ,master_log_file = 'mysql-bin.000004',master_log_pos = '881' 4、发现此时已经不报错 5、启动复制 start slave
SE_You 2024-04-1020 0 0 -
MySQL添加用户删除用户与授权(老版本)
MySql中添加用户,新建数据库,用户授权,删除用户,修改密码(注意每行后边都跟个;表示一个命令语句结束): 1.新建用户 登录MYSQL: @>mysql -u root -p @>密码 创建用户: mysql> insert into mysql.user(Host,User,Password) values("localhost","test",password("1234")); 这样就创建了一个名为:test 密码为:1234 的用户。 注意:此处的"localhost",是指该用户只能在本地登录,不能在另外一台机器上远程登录。如果想远程登录的话,将"localhost"改为"%",表示在任何一台电脑上都可以登录。也可以指定某台机器可以远程登录。 然后登录一下: mysql>exit; @>mysql -u test -p @>输入密码 mysql>登录成功 2.为用户授权 授权格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码"; 登录MYSQL(有ROOT权限),这里以ROOT身份登录: @>mysql -u root -p @>密码 首先为用户创建一个数据库(testDB): mysql>create database testDB; 授权test用户拥有testDB数据库的所有权限(某个数据库的所有权限): mysql>grant all privileges on testDB.* to test@localhost identified by '1234'; mysql>flush privileges;//刷新系统权限表 格式:grant 权限 on 数据库.* to 用户名@登录主机 identified by "密码"; 如果想指定部分权限给一用户,可以这样来写: mysql>grant select,update on testDB.* to test@localhost identified by '1234'; mysql>flush privileges; //刷新系统权限表 授权test用户拥有所有数据库的某些权限: mysql>grant select,delete,update,create,drop on *.* to test@"%" identified by "1234"; //test用户对所有数据库都有select,delete,update,create,drop 权限。 //@"%" 表示对所有非本地主机授权,不包括localhos……
SE_You 2024-04-0915 0 0 -
MySQL慢查询日志分析
一:查询slow log的状态,如示例代码所示,则slow log已经开启。 mysql> show variables like '%slow%'; +---------------------+------------------------------------------+ | Variable_name | Value | +---------------------+------------------------------------------+ | log_slow_queries | ON | | slow_launch_time | 2 | | slow_query_log | ON | | slow_query_log_file | /mysqllog/slow_log/slow_queries_3306.log | +---------------------+------------------------------------------+ 4 rows in set (0.00 sec) 如果没有开启慢查询日志有以下两种方法: 在配置文件[mysqld]中添加slow_query_log = ON和long_query_time = 1,然后重启MySQL即可生效。 set global slow_query_log=1; 在线开启。如果MySQL发生重启,就会失效,如果要永久生效,就必选修改配置文件。 二:slow log的日志相关参数详解 slow_query_log :是否开启慢查询日志,1表示开启,0表示关闭。 log-slow-queries :旧版(5.6以下版本)MySQL数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log slow-query-log-file:新版(5.6及以上版本)MySQL数据库慢查询日志存储路径。可以不设置该参数,系统则会默认给一个缺省的文件host_name-slow.log long_query_time :慢查询阈值,当查询时间多于设定的阈值时,记录日志。 log_queries_not_using_indexes:未使用索引的查询也被记录到慢查询日志中(可选项)。 log_output:日志存储方式。log_output='FILE'表示将日志存入文件,默认值……
SE_You 2024-04-0818 0 0