mysql 多实例主从_MySQL 多实例及其主从复制

Mysql 实例

# 什么是 Mysql 单实例?

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

# Mysql 多实例

多个进程 + 多个线程 + 多个预分配的内存空间(分配给每个 Mysql 单实例)

Mysql 多实例

# mysql 多实例,即在单台服务器上启动多个实例,也是多个配置文件启动数据库

mysql多个配置文件:

1.多个端口(配置 my.cnf,使用 TCP/IP 连接时指定相应端口)

2.多个 Socket 文件(配置 my.cnf,使用 Socket 连接时指定相应路径)

3.多个日志文件(配置 my.cnf)

4.多个 Server_id(配置 my.cnf)

5.多个数据目录(初始化时指定 datadir)

创建多实例目录

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

编辑配置文件

[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

初始化多实例数据目录

[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 --defaults-file=/service/3309/my.cnf --user=mysql --basedir=/service/mysql --datadir=/service/3309/data

授权目录

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

启动多实例

[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 &

# 关闭其中的单个实例

[root@db03 service]# mysqladmin -uroot -p123 -S /service/3307/mysql.sock shutdown

[root@db03 service]# mysqladmin -uroot -p123 -S /service/3308/mysql.sock shutdown

[root@db03 service]# mysqladmin -uroot -p123 -S /service/3309/mysql.sock shutdown

连接多实例并验证

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

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

| Variable_name | Value |

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

| server_id | 1 |

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

[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 |

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

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.

设置密码后连接

[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*

Mysql 多实例主从复制

主库操作

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)

从库的操作

# 从库需要知道的主库信息:主库的 IP,连接主库的用户和密码,binlog 信息

# 注意:每一个从库的 server_id 都不能相同,且都大于主库(主库 server_id = 1,从库 server_id > 1)

# 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)

IO线程 不为 YES

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相同

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

[auto]

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

SQL线程 不为 YES

# 一般情况:主库有数据,从库没有,或者从库有数据,主库没有

# 原因:从库获取主库的信息后(获取 bin-log 日志 file 名称,以及 bin-log 日志 的 position 位置),从库从 position 位置开始同步(bin-log 中记录执行过的 SQL 语句),如果从库已经存在某些表或其他数据,同步会出错

# 即主从数据库数据不一致

# 解决方法:删除从库多余数据,重新同步主库数据(先获取 Pos 值,再同步)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值