Linux MySQL主从配置指南
MySQL主从复制是一种常用的数据备份和灾难恢复策略,它允许一个MySQL服务器(主服务器)上的数据被复制到另一个MySQL服务器(从服务器)上,本文将详细介绍如何在Linux环境下配置MySQL的主从复制。
准备工作
配置主服务器
[mysqld]server-id=1# 主服务器ID,确保主从服务器ID不同log-bin=mysql-bin# 开启二进制日志binlog-format=ROW# 二进制日志格式,ROW或STATEMENT
CREATE USER 'replication_user'@'%' IDENTIFIED BY 'password';GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%';FLUSH PRIVILEGES;
配置从服务器
[mysqld]server-id=2# 从服务器ID,确保与主服务器ID不同log-bin=mysql-bin# 开启二进制日志binlog-format=ROW# 二进制日志格式,ROW或STATEMENT
mysql -h 主服务器IP -u replication_user -p
SHOW SLAVE STATUSG
在从服务器上执行以下命令,设置主服务器信息:
CHANGE MASTER TOMASTER_HOST='主服务器IP',MASTER_USER='replication_user',MASTER_PASSWORD='password',MASTER_LOG_FILE='binlog文件名',MASTER_LOG_POS=binlog位置;
启动从服务器上的复制进程:
START SLAVE;
验证配置
在主服务器上执行以下命令,查看复制状态:
SHOW SLAVE STATUSG
在从服务器上执行以下命令,查看复制状态:
SHOW SLAVE STATUSG
Q1:为什么我的主从复制没有成功?
A1:请检查以下问题:
Q2:如何停止主从复制?
A2:在从服务器上执行以下命令停止复制进程:
stop SLAVE;
在主服务器上,无需执行任何操作,因为主服务器不参与复制进程的停止。
mysql中engine=innodb和engine=myisam的区别
mysql中engine=innodb和engine=myisam的区别2011-8-14 11:09:00来源:Sql最开始用MySQL Administrator建数据库的时候,表缺省是InnoDB类型,也就没有在意。 后来用Access2MySQL导数据的时候发现只能导成 MyISAM类型的表,不知道这两种类型有什么区别,就去查了查。 原来是MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。 MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。 这 样就可以根据数据表不同的用处是用不同的存储类型。 另外,MyISAM类型的二进制数据文件可以在不同操作系统中迁移。 也就是可以直接从Windows系统拷贝到linux系统中使用。 修改:ALTER TABLE tableName ENGINE = MyISAM ;MyISAM:这个是默认类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的 顺序访问方法) 的缩写,它是存储记录和文件的标准方法.与其他存储引擎比较,MyISAM具有检查和修复表格的大多数工具. MyISAM表格可以被压缩,而且它们支持全文搜索.它们不是事务安全的,而且也不支持外键。 如果事物回滚将造成不完全回滚,不具有原子性。 如果执行大量 的SELECT,MyISAM是更好的选择。 InnoDB:这种类型是事务安全的.它与BDB类型具有相同的特性,它们还支持外键表格速度很快.具有比BDB还丰富的特性,因此如果需要一个事务安全的存储引擎,建议使用它.如果你的数据执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表,对于支持事物的InnoDB类型的标,影响速度的主要原因是AUTOCOMMIT默认设置是打开的,而且程序没有显式调用BEGIN 开始事务,导致每插入一条都自动Commit,严重影响了速度。 可以在执行sql前调用begin,多条sql形成一个事物(即使autocommit打 开也可以),将大大提高性能。 ===============================================================1. 4.0以上mysqld都支持事务,包括非max版本。 3.23的需要max版本mysqld才能支持事务。 2. 创建表时如果不指定type则默认为myisam,不支持事务。 可以用 show create table tablename 命令看表的类型。 2.1 对不支持事务的表做start/commit操作没有任何效果,在执行commit前已经提交,测试:执行一个msyql:use test;drop table if exists tn;create table tn (a varchar(10)) type=myisam;drop table if exists ty;create table ty (a varchar(10)) type=innodb;begin;insert into tn values(a);insert into ty values(a);select * from tn;select * from ty;都能看到一条记录执行另一个mysql:use test;select * from tn;select * from ty;只有tn能看到一条记录然后在另一边commit;才都能看到记录。 3. 可以执行以下命令来切换非事务表到事务(数据不会丢失),innodb表比myisam表更安全: alter table tablename type=innodb;3.1 innodb表不能用repair table命令和myisamchk -r table_name但可以用check table,以及mysqlcheck [OPTIONS] database [tables]4. 启动mysql数据库的命令行中添加了以下参数可以使新发布的mysql数据表都默认为使用事务(只影响到create语句。 )--default-table-type=InnoDB测试命令:use test;drop table if exists tn;create table tn (a varchar(10));show create table tn;5. 临时改变默认表类型可以用:set table_type=InnoDB;show variables like table_type;或:c:/mysql/bin/mysqld-max-nt --standalone --default-table-type=InnoDB
mysql 在B数据库下 创建一个与A数据库中一样的表
create table as select * from ;--------------结构,数据内容一致,但是不会复制索引以及外键所以分两步:1:create table like ;-------复制表结构2:insert into select * from ;----------复制数据
MySQL数据库表锁定的几种方法实现
如果两个程序都向表中写数据显然会造成很大的麻烦,甚至会有意外情况发生。 如果表正由一个程序写入,同时进行读取的另一个程序也会产生混乱的结果。 锁定表的方法防止客户机的请求互相干扰或者服务器与维护程序相互干扰的方法主要有多种。 如果你关闭数据库,就可以保证服务器和myisamchk和isamchk之间没有交互作用。 但是停止服务器的运行并不是一个好注意,因为这样做会使得没有故障的数据库和表也不可用。 本节主要讨论的过程,是避免服务器和myisamchk或isamchk之间的交互作用。 实现这种功能的方法是对表进行锁定。 服务器由两种表的锁定方法:1.内部锁定内部锁定可以避免客户机的请求相互干扰——例如,避免客户机的SELECT查询被另一个客户机的UPDATE查询所干扰。 也可以利用内部锁定机制防止服务器在利用myisamchk或isamchk检查或修复表时对表的访问。 语法:锁定表:LOCK TABLES tbl_name {READ | WRITE},[ tbl_name {READ | WRITE},…]解锁表:UNLOCK TABLESLOCK TABLES为当前线程锁定表。 UNLOCK TABLES释放被当前线程持有的任何锁。 当线程发出另外一个LOCK TABLES时,或当服务器的连接被关闭时,当前线程锁定的所有表自动被解锁。 如果一个线程获得在一个表上的一个READ锁,该线程(和所有其他线程)只能从表中读。 如果一个线程获得一个表上的一个WRITE锁,那么只有持锁的线程READ或WRITE表,其他线程被阻止。 每个线程等待(没有超时)直到它获得它请求的所有锁。 WRITE锁通常比READ锁有更高的优先级,以确保更改尽快被处理。 这意味着,如果一个线程获得READ锁,并且然后另外一个线程请求一个WRITE锁, 随后的READ锁请求将等待直到WRITE线程得到了锁并且释放了它。 显然对于检查,你只需要获得读锁。 再者钟情跨下,只能读取表,但不能修改它,因此他也允许其它客户机读取表。 对于修复,你必须获得些所以防止任何客户机在你对表进行操作时修改它。 2.外部锁定服务器还可以使用外部锁定(文件级锁)来防止其它程序在服务器使用表时修改文件。 通常,在表的检查操作中服务器将外部锁定与myisamchk或isamchk作合使用。 但是,外部锁定在某些系统中是禁用的,因为他不能可靠的进行工作。 对运行myisamchk或isamchk所选择的过程取决于服务器是否能使用外部锁定。 如果不使用,则必修使用内部锁定协议。 如果服务器用--skip-locking选项运行,则外部锁定禁用。 该选项在某些系统中是缺省的,如Linux。 可以通过运行mysqladmin variables命令确定服务器是否能够使用外部锁定。 检查skip_locking变量的值并按以下方法进行:◆如果skip_locking为off,则外部锁定有效您可以继续并运行人和一个实用程序来检查表。 服务器和实用程序将合作对表进行访问。 但是,运行任何一个实用程序之前,应该使用mysqladmin flush-tables。 为了修复表,应该使用表的修复锁定协议。 ◆如果skip_locaking为on,则禁用外部锁定,所以在myisamchk或isamchk检查修复表示服务器并不知道,最好关闭服务器。 如果坚持是服务器保持开启状态,月确保在您使用此表示没有客户机来访问它。


![能否实现云上云下一体防护的突破-华为云新网站安全方案 (云计算能够实现,no_ai_sug:false}],slid:7623342728837,queryid:0x18d06eef2a2a685)](https://www.kuidc.com/zdmsl_image/article/20260205120338_13721.jpg)











发表评论