Mysqld_multi在一台服务器上运行多个mysql实例及操作

一、Mysqld_multi在一台物理服务器上运行多个mysql实例

 

Mysql具有一次安装可以运行多个实例的功能,这个功能是通过mysqld_multi实现的。当一台机器上需要运行多个MySQL服务器时,mysqld_multi是管理多个mysqld的服务进程,这些服务进程程序用不同的unix socket或是监听于不同的端口,通过简单的命令,它可以启动,关闭和报告所管理的服务器的状态 。(可以用此在一台机器上做主从复制)。

1.准备

用mysql源程序安装,假设在安装时用的configura选择项如下:

/configure --prefix=/usr/bin/mysql   --datadir=/search/mysql1/data1 --sysconfdir=/etc

 

备注:--prefix将MYSQL安装到/usr/bin/mysql ,

--datadir将数据库生成/search/mysql1/data1,

--sysconfdir是指定mysql使用到的my.cnf配置文件的搜索路径为/etc

 

其他mysql安装过程略。

 

2.配置

安装完成后,就是设置配置文件,是mysql能够运行多个实例。

一下是我们机器上的配置文件my.cnf的配置

 

[mysqld_multi]
mysqld = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
user = root

[mysqld1]
datadir=/search/mysql1/data1
socket=/var/lib/mysql/mysql.sock1
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
port=3306
skip-name-resolve
server_id=21
log-bin=mysql-bin
max_connections=1000
key_buffer_size=2147836348
query_cache_size=134217728
read_rnd_buffer_size=134217728
table_cache=10000
tmp_table_size=536870912
log-slow-queries=slow.log
long_query_time=1
concurrent_insert=2
thread_cache_size=300
#log=/search/mysql1/data1/mysql1.log
pid-file=/search/mysql1/data1/mysql.pid1
log-error=/search/mysql1/data1/log.1
log-slave-updates
slave-skip-errors=ALL


[mysqld2]
datadir=/search/mysql2/data2
socket=/var/lib/mysql/mysql.sock2
user=mysql
old_passwords=1
skip-name-resolve
server_id=2
log-bin=mysql-bin
max_connections=1000
key_buffer_size=2147836348
#query_cache_size=134217728
query_cache_type=0
read_rnd_buffer_size=134217728
table_cache=10000
tmp_table_size=536870912
log-slow-queries=slow.log
long_query_time=1
concurrent_insert=2
thread_cache_size=300
port=3307
#log=/search/mysql2/data2/mysql2.log
pid-file=/search/mysql2/data2/mysql.pid2
log-error=/search/mysql2/data2/log.2

 

[mysqld3]
datadir=/search/mysql3/data3
socket=/var/lib/mysql/mysql.sock3
user=mysql
old_passwords=1
port=3308
skip-name-resolve
server_id=3
log-bin=mysql-bin
max_connections=1000
key_buffer_size=2147836348
#query_cache_size=134217728
query_cache_type=0
read_rnd_buffer_size=134217728
table_cache=10000
tmp_table_size=536870912
log-slow-queries=slow.log
long_query_time=1
concurrent_insert=2
thread_cache_size=300
#log=/search/mysql3/data3/mysql3.log
pid-file=/search/mysql3/data3/mysql.pid3
log-error=/search/mysql3/data3/log.3

 

[mysqld4]
datadir=/search/mysql3/data4
socket=/var/lib/mysql/mysql.sock4
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
port=3309
skip-name-resolve
server_id=13
log-bin=mysql-bin
max_connections=1000
key_buffer_size=2147836348
#query_cache_size=134217728
query_cache_type=0
delay_key_write=ALL
read_rnd_buffer_size=134217728
table_cache=10000
tmp_table_size=536870912
log-slow-queries=slow.log
long_query_time=1
concurrent_insert=2
thread_cache_size=300
#log=/search/mysql3/data4/mysql4.log
pid-file=/search/mysql3/data4/mysql.pid4
log-error=/search/mysql3/data4/log.4

 

根据以上的配置信息,可知我们配置了mysqld1,mysqld2,mysqld3,mysqld4四个mysql实例,每个实例都指定了不同的连接端口(是3306——3309)和数据存储路径(datadir所指定的就是它们各自数据的存储路径)等等一些其他的信息。

 

最重要的配置文件my.cnf弄好了之后,现在为配置中不同mysql 服务建立各自文件夹和初始数据库等。

[mysqld1]是一个默认的,在我们安装mysql时已经有了,所以不用管它。接下来只要配置[mysqld2]、[mysqld3]、[mysqld3]既可以。

下面就已配置[mysqld2]为例:

只要根据配置就的路径为它建立一个目录就可以。将该目录改为mysql管理权,命令如下

  mkdir /search/mysql2/data2   #建立[mysqld2]实例的数据存储目录

 

建数据库,我们可以把默认的mysql数据库复制过来,以利用其它的mysql帐号,其它数据库根据应用再建立。

cp -R /search/mysql1/data1/mysql  /usr/local/mysql/data2  #默认的mysql数据库复制过来

 

chown -R mysql:mysql /usr/local/mysql/data2  #该目录改为mysql管理权

 

[mysqld3],[mysqld4]的操作相同,在此省略。

至此我们的配置就结束了,接下来就是要启动我们的mysql服务了。
 

 

3.启动mysql服务

 

使用如下参数来启动mysqld_multi: (注:该命令在mysql的bin目录中,根据上面所提到./configure --prefix=/usr/bin/mysql ,所以该文件应该在 /usr/bin/mysql/bin,这得根据你安装时所指定的路径 ) 。

 

mysqld_multi [options] [GNR[,GNR]...]

 

start,stop和report是指你想到执行的操作。你可以在单独的服务或是多服务上指定一个操作,区别于选项后面的GNR列表。如果没有指定GNR列表,那么mysqld_multi将在所有的服务中根据选项文件进行操作。

每一个GNR的值是组的序列号或是一个组的序列号范围。此项的值必须是组名字最后的数字,比如说如果组名为mysqld17,那么此项的值则为 17。如果指定一个范围,使用"-"(破折号)来连接二个数字。如GNR的值为10-13,则指组mysqld10到组mysqld13。多个组或是组范围可以在命令行中指定,使用","(逗号)隔开。不能有空白的字符(如空格或tab),在空白字符后面的参数将会被忽略。 (注:GNR值就是我们定义my.cnf中mysqld#中的值,我这里只有1-4)。

 

 mysqld_multi --config-file=/etc/my.cnf start 1   #只启动第一个mysql服务,相关文件由my.cnf中mysql1设定

 mysqld_multi --config-file=/etc/my.cnf stop 1   #停止第一个mysql服务,相关文件由my.cnf中mysql1设定

 mysqld_multi   --config-file=/etc/my.cnf start 1-4    #启动 第1至4mysql服务,其实就是我这里的全部。

 

注意:直接用 service mysqld start 命令去启动会报错。【个人觉得这个命令是用来启动只安装了单个实例的服务器的】

 

4、客户端访问

任何(远程)客户端访问都需要指定访问端口。方才能进入指定数据库服务。否则将使用到Mysql默认的端口(3306)所服务的MYSQL。

 

4.1 如果是在本地机器上连接mysql服务器

 mysql -S/var/lib/mysql/mysql.sock1   #连接的是[mysql1]实例上

 如果使用 mysql -p3306 命令去连接[mysql1]实例,则会报错“ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) ”【个人觉得出现这个错误是,默认会去找mysql.sock这个文件,而因为此物理机器上运行的是多个实例,所以这个文件不存在】

 

4.2如果是在远程机器上去连接此mysql服务器(当然此远程机器需要有连接的权限)

mysql -umysql -p -h10.10.2.23   #这里假设用户名是mysql,服务器iP是10.10.2.23,则连接的是[mysql1]实例,因为没有指定端口。

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的docker-compose.yml文件示例,用于监控两台MySQL容器中的MySQL服务: ``` version: '3.7' services: prometheus: image: prom/prometheus:v2.25.2 ports: - 9090:9090 volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml command: - '--config.file=/etc/prometheus/prometheus.yml' mysql1: image: mysql:latest environment: MYSQL_ROOT_PASSWORD: examplepassword ports: - 3306:3306 healthcheck: test: ["CMD", "mysqladmin", "-uroot", "-pexamplepassword", "ping"] interval: 10s timeout: 5s retries: 3 mysql2: image: mysql:latest environment: MYSQL_ROOT_PASSWORD: examplepassword ports: - 3307:3306 healthcheck: test: ["CMD", "mysqladmin", "-uroot", "-pexamplepassword", "ping"] interval: 10s timeout: 5s retries: 3 mysqld_exporter: image: prom/mysqld-exporter:v0.12.1 environment: DATA_SOURCE_NAME: "root:examplepassword@(mysql1:3306)/" # include all tables in the 'test' database EXPORTER_TABLES: "*.*" ports: - 9104:9104 depends_on: - mysql1 restart: on-failure mysqld_exporter_2: image: prom/mysqld-exporter:v0.12.1 environment: DATA_SOURCE_NAME: "root:examplepassword@(mysql2:3306)/" # include all tables in the 'test' database EXPORTER_TABLES: "*.*" ports: - 9105:9104 depends_on: - mysql2 restart: on-failure ``` 这个docker-compose.yml文件定义了5个服务: - `prometheus`:Prometheus服务,监听端口为9090,使用本地的prometheus.yml文件作为配置文件。 - `mysql1`:第一台MySQL容器,监听端口为3306,使用examplepassword作为root用户的密码。 - `mysql2`:第二台MySQL容器,监听端口为3307,使用examplepassword作为root用户的密码。 - `mysqld_exporter`:mysqld_exporter服务,监听端口为9104,监控mysql1容器中的MySQL服务。 - `mysqld_exporter_2`:mysqld_exporter服务,监听端口为9105,监控mysql2容器中的MySQL服务。 在上面的配置中,我们使用了`prom/mysqld-exporter`镜像来作为mysqld_exporter服务的基础镜像。我们定义了两个mysqld_exporter服务,分别监控两个MySQL容器中的MySQL服务。我们通过`DATA_SOURCE_NAME`环境变量设置了mysqld_exporter服务连接的MySQL数据库的地址和密码,使用了mysql1和mysql2服务的容器名称来作为MySQL服务的地址。我们还使用了`EXPORTER_TABLES`环境变量来告诉mysqld_exporter服务要监控的MySQL数据库和表。 注意:这个配置文件仅供参考,具体的配置需要根据实际情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值