mysql多个实例 主从库_Mysql数据库-多实例主从复制-主从故障详解

一、mysql结构

1.实例

1.什么是单实例

一个进程 + 多个线程 + 一个预分配的内存空间

2.多实例

多个进程 + 多个线程 + 多个预分配的内存空间

2.mysql程序结构

1)连接层

1.验证用户身份

2.提供两种连接方式

3.与sql层建立线程

2)sql层

1.接收连接层发过来的sql语句

2.判断sql的语法

3.判断sql的语义

4.解析器:解析sql语句,生成执行计划

5.优化器:选择最优执行计划

6.执行器:执行选择出来的计划,SQL

6.1 与存储引擎层建立交互,将sql语句传给存储引擎层

6.2 将存储引擎层传来的数据以表格的形式展示出来

7.将数据写入缓存

8.记录日志

3)存储引擎层

1.与sql层建立交互,接收sql层传来sql语句

2.与磁盘建立交互,获取数据

wp_editor_md_b675bf72b2f3f2e9744afe1dd7b0d110.jpg

3.mysql逻辑结构

1.库:库的下面全是表

2.表:元数据 + 真实数据行

3.元数据:列 + 其它属性(行数+占用空间大小+权限)

4.列:列名字 + 数据类型 + 其他约束(非空、唯一、主键、非负数、自增长、默认值)

4.mysql物理结构

1.MySQL的最底层的物理结构是数据文件,也就是说,存储引擎层,打交道的文件,是数据文件。

2.存储引擎分为很多种类(Linux中的FS)

3.不同存储引擎的区别:存储方式、安全性、性能

#数据库创建时,不论库名还是表名,尽量都用小写字母

5.mysql物理大小

1.段:理论上一个表就是一个段,由多个区构成,(分区表是一个分区一个段)

2.区:连续的多个页构成

3.页:最小的数据存储单元,默认是16k

4.分区表:一个区构成一张段,就是一张表

wp_editor_md_4712384bb8cb15be6d2417cfb5836077.jpg

二、mysql的多实例

#mysql 多实例,也是多个配置文件启动数据库

mysql多个配置文件:

1.多个端口

2.多个socket文件

3.多个日志文件

4.多个srver_id

5.多个数据目录

1.创建多实例目录

创建多实例的时候只需要,指定basedir为最原先安装的路径就好了,可以在任何文件夹下创建多实例目录,注意权限对数据库启动的影响。

[root@db03 ~]# mkdir /service/{3307,3308,3309} -p

2.编辑配置文件

[root@db03 ~]# vim /service/3307/my.cnf

[mysqld]

basedir = /service/mysql

datadir = /service/3307/data

port=3307

socket=/service/3307/mysql.sock

server_id=1

log_err=/service/3307/data/mysql.err

log_bin=/service/3307/data/mysql-bin

[root@db03 ~]# vim /service/3308/my.cnf

[mysqld]

basedir = /service/mysql

datadir = /service/3308/data

port=3308

socket=/service/3308/mysql.sock

server_id=2

log_err=/service/3308/data/mysql.err

log_bin=/service/3308/data/mysql-bin

[root@db03 ~]# vim /service/3309/my.cnf

[mysqld]

basedir = /service/mysql

datadir = /service/3309/data

port=3309

socket=/service/3309/mysql.sock

server_id=3

log_err=/service/3309/data/mysql.err

log_bin=/service/3309/data/mysql-bin

3.初识化多实例数据目录

[root@db03 scripts]# ./mysql_install_db --defaults-file=/service/3307/my.cnf --user=mysql --basedir=/service/mysql --datadir=/service/3307/data

[root@db03 scripts]# ./mysql_install_db --defaults-file=/service/3308/my.cnf --user=mysql --basedir=/service/mysql --datadir=/service/3308/data

[root@db03 scripts]# ./mysql_install_db .cnf --user=mysql --basedir=/service/mysql --datadir=/service/3309/data

4.授权目录

[root@db03 service]# chown -R mysql.mysql /service/

5.启动多实例

注意在多实例的启动过程中会消耗比较多的内存。

[root@db03 service]# mysqld_safe --defaults-file=/service/3309/my.cnf &

[root@db03 service]# mysqld_safe --defaults-file=/service/3308/my.cnf &

[root@db03 service]# mysqld_safe --defaults-file=/service/3307/my.cnf &

6.连接多实例并验证

[root@db03 service]# mysql -S /service/3308/mysql.sock -e "show variables like 'server_id'"

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| server_id | 2 |

+---------------+-------+

[root@db03 service]# mysql -S /service/3309/mysql.sock -e "show variables like 'server_id'"

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| server_id | 3 |

+---------------+-------+

[root@db03 service]# mysql -S /service/3307/mysql.sock -e "show variables like 'server_id'"

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| server_id | 1 |

+---------------+-------+

7.mysql多实例设置密码

[root@db03 service]# mysqladmin -S /service/3307/mysql.sock -uroot password '123'

Warning: Using a password on the command line interface can be insecure.

[root@db03 service]# mysqladmin -S /service/3308/mysql.sock -uroot password '123'

Warning: Using a password on the command line interface can be insecure.

[root@db03 service]# mysqladmin -S /service/3309/mysql.sock -uroot password '123'

Warning: Using a password on the command line interface can be insecure.

8.设置密码后连接

使用tcp/ip 的连接会产生一个反向解析的问题。可以在配置文件中设置跳过反向解析,或者直接使用socket的方式去连接。如果使用localhost去连接会报错因为他会去找默认socket文件的位置,mysql多实例配置文件的socket的文件是我们自己指定的位置会出现找不到的情况。

[root@db03 service]# mysql -S /service/3307/mysql.sock -uroot -p

Enter password:

# 简单连接方式

[root@db03 service]# cat /usr/bin/mysql3307

mysql -S /service/3307/mysql.sock -uroot -p123

[root@db03 service]# cat /usr/bin/mysql3308

mysql -S /service/3308/mysql.sock -uroot -p123

[root@db03 service]# cat /usr/bin/mysql3309

mysql -S /service/3309/mysql.sock -uroot -p123

[root@db03 service]# chmod +x /usr/bin/mysql33*

三、数据库多实例主从复制

1.主库操作

1.开启binlog

[root@db03 service]# vim /service/3307/my.cnf

[mysqld]

basedir = /service/mysql

datadir = /service/3307/data

port=3307

socket=/service/3307/mysql.sock

server_id=1

log_err=/service/3307/data/mysql.err

log_bin=/service/3307/data/mysql-bin

2.主库授权一个用户,给从库用来连接

mysql> grant replication slave on *.* to rep@'172.16.1.%' identified by '123';

Query OK, 0 rows affected (0.18 sec)

3.主库查看binlog信息

mysql> show master status;

+------------------+----------+

| File | Position |

+------------------+----------+

| mysql-bin.000004 | 120 |

+------------------+----------+

1 row in set (0.00 sec)

2.从库的操作

#从库需要知道的主库信息

主库的IP

连接主库用的用户和密码

binlog信息

1.配置主从

change master to

master_host='172.16.1.53',

master_user='rep',

master_password='123',

master_log_file='mysql-bin.000004',

master_log_pos=120,

master_port=3307;

1.开启IO线程和sql线程

mysql> start slave;

Query OK, 0 rows affected (0.08 sec)

3.IO线程不为YES

IO线程的功能主要就是去拉取bin_log中的操作,然后再自己的数据库上面执行来达到同步的目的。

1.测试网络

[root@db03 ~]# ping 172.16.1.53

2.测试端口

[root@db03 ~]# telnet 172.16.1.53 3307

3.测试主库授权的用户登录

[root@db03 ~]# mysql -urep -p123 -h172.16.1.53 -P3307

4.反向解析

[root@db03 service]# vim /service/3307/my.cnf

skip-name-resolve

5.UUID相同

克隆的时候,uuid相同会导致配置数据库主从复制的问题。

[root@db03 ~]# cat /service/3307/data/auto.cnf

[auto]

server-uuid=527f6221-c286-11ea-9ca7-000c29e19d84

4.SQL线程不为YES

在从库上创建了数据库,会导致这个问题。

1.主库有数据,从库没有

2.从库有数据,主库没有

# 主从数据库数据不一致

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值