mysql主备怎么访问,mysql主备方案
MySQL如何访问??
●客户端访问服务端
成都创新互联公司欢迎咨询:028-86922220,为您提供成都网站建设网页设计及定制高端网站建设服务,成都创新互联公司网页制作领域十载,包括成都房屋鉴定等多个行业拥有丰富建站经验,选择成都创新互联公司,为企业锦上添花!
。利用Windows控制台访问(MySQL客户端)
。利用数据库管理工具(Navicat)
●客户端需要连接认证
。-h: 主机地址(本机localhost可以省略)
。-P: 端口号(默认3306可以省略)
。-u: 用户名
。-p: 用户密码
哪位大神可以简单说一下外网访问内网MySQL数据库的步骤吗?
1,明确MySQL数据库内网访问地址端口,确保MySQL数据库服务正常,在内网可以正常访问连接。如我本机MySQL数据库访问地址是localhost:3306。
2.内网使用花生壳动态域名解析,内网服务器安装花生壳,并使用它。
3.使用自己的帐号登录。如没有帐号,“注册帐号”进入网站进行注册帐号。正常登录后,会显示登录帐号下的域名。
4.做映射。在默认域名的地方点击花生壳管理添加映射。点击当前主机。内网任何端口映射,获取外网随机端口,点击确认。
如何设置mysql在局域网中访问
第一:更改 “mysql” 数据库里的 “user” 表里的 “host” 项,从”localhost”改称'%'。
或者新加条记录,“host” 项为要访问的ip地址,并授权。重启mysql服务。
第二:在系统防火墙添加例外端口:3306,并允许例外。错误提示:
ERROR 1130: Host '192.168.1.3' is not allowed to connect to this MySQL server
的解决方法: 1。 改表法。可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称"%"
mysql -u root -pvmwaremysqluse mysql;mysqlupdate user set host = '%' where user = 'root';mysqlselect host, user from user; 2. 授权法。例如,你想myuser使用mypassword从任何主机连接到mysql服务器的话。
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
如果你想允许用户myuser从ip为192.168.1.3的主机连接到mysql服务器,并使用mypassword作为密码
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
3.在window自带的防火墙里的例外添加3306端口
总结:mysql -u root -p
mysqluse mysql;
mysqlselect 'host' from user where user='root';
mysqlupdate user set host = '%' where user ='root';
mysqlflush privileges;
mysqlselect 'host' from user where user='root';
第一句是以权限用户root登录
第二句:选择mysql库
第三句:查看mysql库中的user表的host值(即可进行连接访问的主机/IP名称)
第四句:修改host值(以通配符%的内容增加主机/IP地址),当然也可以直接增加IP地址
第五句:刷新MySQL的系统权限相关表
第六句:再重新查看user表时,有修改。。
重起mysql服务即可完成。
MySql怎样允许主机被远程访问
1、改表法。
可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称"%"
mysql -u root -pvmwaremysqluse mysql;
mysqlupdate user set host = '%' where user = 'root';
mysqlselect host, user from user;
2、授权法。例如,你想myuser使用mypassword从任何主机连接到mysql服务器的话。
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%'IDENTIFIED BY 'mypassword' WI
TH GRANT OPTION;
如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器,并使用mypassword作为密码
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3'IDENTIFIED BY
'mypassword' WITH GRANT OPTION;
我用的第一个方法,刚开始发现不行,在网上查了一下,少执行一个语句 mysqlFLUSH RIVILEGES
使修改生效,就可以了
另外一种方法:
在安装mysql的机器上运行:
1、d:\mysql\bin\mysql -h localhost -u root
//这样应该可以进入MySQL服务器
2、mysqlGRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION
//赋予任何主机访问数据的权限
3、mysqlFLUSH PRIVILEGES
//修改生效
4、mysqlEXIT
//退出MySQL服务器
这样就可以在其它任何的主机上以root身份登录啦。
mysql主备同步的原理
MYSQL主从同步原理:
1) MYSQL主从同步是异步复制的过程,整个同步需要开启3线程,master上开启bin-log日志(记录数据库增、删除、修改、更新操作);
2) Slave开启I/O线程来请求master服务器,请求指定bin-log中position点之后的内容;
3) Master端收到请求,Master端I/O线程响应请求,bin-log、position之后内容返给salve;
4) Slave将收到的内容存入relay-log中继日志中,生成master.info(记录master ip、bin-log、position、用户名密码);
5) Slave端SQL实时监测relay-log日志有更新,解析更新的sql内容,解析成sql语句,再salve库中执行;
6) 执行完毕之后,Slave端跟master端数据保持一致!
**MYSQL bin-log用途**
1) bin-log日志最大的功能记录数据库增、删、改、插入等操作,记录用户操作的SQL语句;
2) bin-log日志可以用数据增量备份、完整备份;
3) bin-log还可以主要主从复制+读写分离;
MySQL实战问题03 mysql如何保证主备一致
MySQL 主备的基本原理主备流程切换
在状态 1 中,客户端的读写都直接访问节点 A,而节点 B 是 A 的备库,只是将 A 的更新都同步过来,到本地执行。这样可以保持节点 B 和 A 的数据是相同的
当需要切换的时候,就切成状态 2。这时候客户端读写访问的都是节点 B,而节点 A 是 B 的备库。
M-S模式中, 为什么建议把备库设为readonly? 有时候一些运营类的查询语句会被放到备库上去查,设置为只读可以防止误操作; 防止切换逻辑有 bug,比如切换过程中出现双写,造成主备不一致 可以用 readonly 状态,来判断节点的角色。 把备库设置成只读了,还怎么跟主库保持同步更新呢?
因为 readonly 设置对超级 (super) 权限用户是无效的,而用于同步更新的线程,就拥有超级权限。
节点 A 到 B 这条线的内部流程是什么样的
下图画出的就是一个 update 语句在节点 A 执行,然后同步到节点 B 的完整流程图
备库 B 跟主库 A 之间维持了一个长连接。主库 A 内部有一个线程,专门用于服务备库 B 的这个长连接
一个事务日志同步的完整过程是这样的: 在备库 B 上通过 change master 命令,设置主库 A 的 IP、端口、用户名、密码,以及要从哪个位置开始请求 binlog,这个位置包含文件名和日志偏移量。 在备库 B 上执行 start slave 命令,这时候备库会启动两个线程,就是图中的 io_thread 和 sql_thread。其中 io_thread 负责与主库建立连接。 主库 A 校验完用户名、密码后,开始按照备库 B 传过来的位置,从本地读取 binlog,发给 B。 备库 B 拿到 binlog 后,写到本地文件,称为中转日志(relay log)。 sql_thread 读取中转日志,解析出日志里的命令,并执行。 binlog 的三种格式对比
三种格式分别是: statement row mixed
为了便于描述 binlog 的这三种格式间的区别, 创建并初始化一个表
mysql CREATE TABLE `t` ( `id` int(11) NOT NULL, `a` int(11) DEFAULT NULL, `t_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `a` (`a`), KEY `t_modified`(`t_modified`) ) ENGINE=InnoDB; insert into t values(1,1,'2018-11-13'); insert into t values(2,2,'2018-11-12'); insert into t values(3,3,'2018-11-11'); insert into t values(4,4,'2018-11-10'); insert into t values(5,5,'2018-11-09');
删除一行, 分析binlog
mysql delete from t /*comment*/ where a=4 and t_modified='2018-11-10' limit 1; 查询binlog命令: mysql show binlog events in 'master.000001'; 当 binlog_format=statement 时
binlog 里面记录的就是 SQL 语句的原文:
分析一下上图输出的结果: 第一行可以先忽略. 第二行是一个 BEGIN,跟第四行的 commit 对应,表示中间是一个事务; 第三行是真实的执行语句, 在delete命令前,还有一个use test命令, 是mysql自动添加的. 最后一行是一个 COMMIT, 包含一个xid. 如果使用statement格式, 记录到binlog 的是语句原文. 会有什么问题出现呢?
如果delete 带有 limit, 很可能出出现住主备数据库不一致的情况
在主库执行这条 SQL 语句的时候,用的是索引 a;而在备库执行这条 SQL 语句的时候,却使用了索引 t_modified
当 binlog_format= row 时:
与statement相比, begin 与 commit 是一致的, 但是row格式没有记录原文, 而是替换成了两个event, 粉笔是table_map 与 delete_rows
Table_map event,用于说明接下来要操作的表是 test 库的表 t; Delete_rows event,用于定义删除的行为。 使用mysqlbinlog工具分析解析binlog中内容 mysqlbinlog -vv data/master.000001 --start-position=8900;
解析结果:
server id 1,表示这个事务是在 server_id=1 的这个库上执行的。 每个 event 都有 CRC32 的值,这是因为参数 binlog_checksum 设置成了 CRC32。 Table_map event 显示了接下来要打开的表,map 到数字 226。现在我们这条 SQL 语句只操作了一张表,如果要操作多张表呢?每个表都有一个对应的 Table_map event、都会 map 到一个单独的数字,用于区分对不同表的操作。 在 mysqlbinlog 的命令中,使用了 -vv 参数是为了把内容都解析出来,所以从结果里面可以看到各个字段的值(比如,@1=4、 @2=4 这些值)。 binlog_row_image 的默认配置是 FULL,因此 Delete_event 里面,包含了删掉的行的所有字段的值。如果把 binlog_row_image 设置为 MINIMAL,则只会记录必要的信息,在这个例子里,就是只会记录 id=4 这个信息。 最后的 Xid event,用于表示事务被正确地提交了。 为什么会有 mixed 格式的 binlog?为什么会有 mixed 这种 binlog 格式的存在场景? 因为有些 statement 格式的 binlog 可能会导致主备不一致,所以要使用 row 格式。 但 row 格式的缺点是,很占空间。比如你用一个 delete 语句删掉 10 万行数据,用 statement 的话就是一个 SQL 语句被记录到 binlog 中,占用几十个字节的空间。但如果用 row 格式的 binlog,就要把这 10 万条记录都写到 binlog 中。这样做,不仅会占用更大的空间,同时写 binlog 也要耗费 IO 资源,影响执行速度。 所以,MySQL 就取了个折中方案,也就是有了 mixed 格式的 binlog。mixed 格式的意思是,MySQL 自己会判断这条 SQL 语句是否可能引起主备不一致,如果有可能,就用 row 格式,否则就用 statement 格式。 如何解决双M结构的循环复制问题解决两个节点间的循环复制的问题的逻辑 规定两个库的 server id 必须不同,如果相同,则它们之间不能设定为主备关系; 一个备库接到 binlog 并在重放的过程中,生成与原 binlog 的 server id 相同的新的 binlog; 每个库在收到从自己的主库发过来的日志后,先判断 server id,如果跟自己的相同,表示这个日志是自己生成的,就直接丢弃这个日志。 按照这个逻辑,如果我们设置了双 M 结构,日志的执行流就会变成这样: 从节点 A 更新的事务,binlog 里面记的都是 A 的 server id; 传到节点 B 执行一次以后,节点 B 生成的 binlog 的 server id 也是 A 的 server id; 再传回给节点 A,A 判断到这个 server id 与自己的相同,就不会再处理这个日志。所以,死循环在这里就断掉了。
当前题目:mysql主备怎么访问,mysql主备方案
分享URL:http://azwzsj.com/article/hcpocp.html