mysql 多端口设置如开启3306,3307,3308端口后, 能否通过不同端口操作同一张表?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 多端口设置如开启3306,3307,3308端口后, 能否通过不同端口操作同一张表?相关的知识,希望对你有一定的参考价值。

没明白啥意思...同一个库的同一张表??? 那就是只能你数据库是哪个端口.就用那个端口....

mysql可以实现多端口.多版本共存...但肯定是不同数据库不同数据的...具体实现参考编译安装或者mysql_multi追问

要的就是你这答案,我现有的3个服务器a b c 都有3306端口, 但是只能访问其中一个服务器的数据库, 但是端口不能变, 想加个端口3307的做对外的

追答

3个服务器都用3306??? 你怎么实现的? 是用mysql_multi??? 这个功能说实话..个人是不推荐的..一来这相当于只有一个mysql服务要负担3个服务器的压力..二来..管理极其不方便..一个要维护,3个都要停...
个人的建议是采用编译安装..安装3个服务..在编译的时候把端口改成不一样就成了...

给你发一段.我编译的代码(仅供参考):
编译安装之前需要对系统安装必要的依赖包

[root@dbtest3 ~]# yum install -y libtermcap libtermcap-devel imake autoconf automake libtool m4 libstdc++-devel gcc-c++ zlib-devel ncurses-devel bison
mysql编译安装之前,先安装cmake
[root@dbtest3 ~]# tar -zxvf cmake-2.8.8.tar.gz
进入cmake
[root@dbtest3 ~]# cd cmake-2.8.8
[root@dbtest3 cmake-2.8.8]# ./bootstrap
[root@dbtest3 cmake-2.8.8]# gmake
[root@dbtest3 cmake-2.8.8]# make install
开始准备安装mysql
[root@dbtest3 ~]# tar -zxvf mysql-5.6.16.tar.gz
[root@dbtest3 ~]# cd mysql-5.6.16
[root@dbtest3 ~]# cmake -DCMAKE_INSTALL_PREFIX=/opt/mysql3307/ -DMYSQL_DATADIR=/opt/mysql3307/data -DSYSCONFDIR=/opt/mysql -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DMYSQL_UNIX_ADDR=/tmp/mysqld3307.sock -DMYSQL_TCP_PORT=3307 -DENABLED_LOCAL_INFILE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DMYSQL_USER=mysql
[root@dbtest3 ~]# make
[root@dbtest3 ~]# make install
[root@dbtest3 ~]# scripts/mysql_install_db --user=mysql --datadir=/opt/mysql3307/data
[root@dbtest3 ~]# chown -R mysql:mysql /opt/mysql3307
[root@dbtest3 ~]# cp support-files/mysql.server /etc/init.d/mysql3307
[root@dbtest3 ~]# chmod 755 /etc/init.d/mysql3307
[root@dbtest3 ~]# chkconfig --add mysql
[root@dbtest3 ~]# chkconfig --level 2345 mysql on
[root@dbtest3 ~]# PATH=/opt/mysql3307/bin:$PATH
[root@dbtest3 ~]# echo "PATH=/opt/mysql3307/bin:$PATH" >> /etc/profile
[root@dbtest3 ~]# PATH=/opt/mysql3307/bin:$PATH
[root@dbtest3 ~]# export PATH
配置下my.cnf
就over

追问

谢谢啊!

参考技术A 运行多个mysql,共享存储咯追问

你意思是说,可以操作同一张表?

mysql多实例安装

1.MySQL多实例介绍

1.1.什么是MySQL多实例

MySQL多实例就是在一台机器上开启多个不同的服务端口(如:3306,3307),运行多个MySQL服务进程,通过不同的socket监听不同的服务端口来提供各自的服务:;

1.2.MySQL多实例的特点有以下几点

1:有效利用服务器资源,当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务。

2:节约服务器资源

3:资源互相抢占问题,当某个服务实例服务并发很高时或者开启慢查询时,会消耗更多的内存、CPU、磁盘IO资源,导致服务器上的其他实例提供服务的质量下降;

1.3.部署mysql多实例的两种方式

第一种是使用多个配置文件启动不同的进程来实现多实例,这种方式的优势逻辑简单,配置简单,缺点是管理起来不太方便;

第二种是通过官方自带的mysqld_multi使用单独的配置文件来实现多实例,这种方式定制每个实例的配置不太方面,优点是管理起来很方便,集中管理;

1.4.同一开发环境下安装两个数据库,必须处理以下问题

  • 配置文件安装路径不能相同
  • 数据库目录不能相同
  • 启动脚本不能同名
  • 端口不能相同
  • socket文件的生成路径不能相同

2.Mysql多实例安装部署

2.1.部署环境

Red Hat Enterprise Linux Server release 6.4

2.2.安装mysql软件版本

2.2.1.免编译二进制包

mysql-5.6.21-linux-glibc2.5-x86_64.tar.gz

2.3.解压和迁移

tar -xvf mysql-5.6.21-linux-glibc2.5-x86_64.tar.gz

mv mysql-5.6.21-linux-glibc2.5-x86_64 /usr/local/mysql

2.4.关闭iptables

临时关闭:service iptables stop 

永久关闭:chkconfig iptables off

2.5.关闭selinux

vi /etc/sysconfig/selinux  

将SELINUX修改为DISABLED,即SELINUX=DISABLED 

2.6.创建mysql用户

groupadd -g 27 mysql

useradd -u 27 -g mysql mysql

id mysql

uid=501(mysql) gid=501(mysql) groups=501(mysql)

2.7.创建相关目录

mkdir -p /data/mysql/ {mysql_3306,mysql_3307}

mkdir /data/mysql/mysql_3306/ {data,log,tmp}

mkdir /data/mysql/mysql_3307/ {data,log,tmp}

2.8.更改目录权限

chown -R mysql:mysql /data/mysql/ 

chown -R mysql:mysql /usr/local/mysql/

2.9. 添加环境变量

echo ‘export PATH=$PATH:/usr/local/mysql/bin‘ >>  /etc/profile 

source /etc/profile  

2.10.复制my.cnf文件到etc目录

cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf

2.11.修改my.cnf(在一个文件中修改即可)

[client]  

port=3306  

socket=/tmp/mysql.sock  

 

[mysqld_multi]  

mysqld = /usr/local/mysql /bin/mysqld_safe  

mysqladmin = /usr/local/mysql /bin/mysqladmin  

log = /data/mysql/mysqld_multi.log  

 

[mysqld]  

user=mysql  

basedir = /usr/local/mysql  

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES  

 

[mysqld3306]  

mysqld=mysqld  

mysqladmin=mysqladmin  

datadir=/data/mysql/mysql_3306/data  

port=3306  

server_id=3306  

socket=/tmp/mysql_3306.sock  

log-output=file  

slow_query_log = 1  

long_query_time = 1  

slow_query_log_file = /data/mysql/mysql_3306/log/slow.log  

log-error = /data/mysql/mysql_3306/log/error.log  

binlog_format = mixed  

log-bin = /data/mysql/mysql_3306/log/mysql3306_bin  

   

[mysqld3307]  

mysqld=mysqld  

mysqladmin=mysqladmin  

datadir=/data/mysql/mysql_3307/data  

port=3307  

server_id=3307  

socket=/tmp/mysql_3307.sock  

log-output=file  

slow_query_log = 1  

long_query_time = 1  

slow_query_log_file = /data/mysql/mysql_3307/log/slow.log  

log-error = /data/mysql/mysql_3307/log/error.log  

binlog_format = mixed  

log-bin = /data/mysql/mysql_3307/log/mysql3307_bin

2.12. 初始化数据库

2.12.1. 初始化3306数据库 

/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/mysql/mysql_3306/data --defaults-file=/etc/my.cnf  

2.12.2. 初始化3307数据库 

/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/mysql/mysql_3307/data --defaults-file=/etc/my.cnf  

2.12.3. 检查数据库是否初始化成功

出现两个”OK”

 技术图片

技术图片

 

2.12.4. 查看数据库是否初始化成功(2)

查看3306数据库

[[email protected] ~]# cd /data/mysql/mysql_3306/data

[[email protected] data]# ls

auto.cnf  ibdata1  ib_logfile0  ib_logfile1  mysql  mysql.pid  performance_schema  test

 

查看3307数据库

[[email protected] ~]# cd /data/mysql/mysql_3307/data

[[email protected] data]# ls

auto.cnf  ibdata1  ib_logfile0  ib_logfile1  mysql  mysql.pid  performance_schema  test

2.13.设置启动文件

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql

2.14.mysqld_multi进行多实例管理

启动全部实例:/usr/local/mysql/bin/mysqld_multi start

查看全部实例状态:/usr/local/mysql/bin/mysqld_multi report 

启动单个实例:/usr/local/mysql/bin/mysqld_multi start 3306 

停止单个实例:/usr/local/mysql/bin/mysqld_multi stop 3306 

查看单个实例状态:/usr/local/mysql/bin/mysqld_multi report 3306 

2.14.1.启动全部实例

[[email protected] ~]# /usr/local/mysql/bin/mysqld_multi start

[[email protected] ~]# /usr/local/mysql/bin/mysqld_multi report

Reporting MySQL servers

MySQL server from group: mysqld3306 is running

MySQL server from group: mysqld3307 is running

2.15.查看启动进程  

 技术图片

2.16.修改密码

mysql的root用户初始密码是空,所以需要登录mysql进行修改密码,下面以3306为例: 

mysql -S /tmp/mysql_3306.sock   

set password for [email protected]‘localhost‘=password(‘123456‘); 

flush privileges; 

下次登录:

[[email protected] ~]# mysql -S /tmp/mysql_3306.sock -p

Enter password:

2.17.新建用户及授权

一般新建数据库都需要新增一个用户,用于程序连接,这类用户只需要insert、update、delete、select权限。

新增一个用户,并授权如下: 

grant select,delete,update,insert on *.* to [email protected]‘192.168.0.%‘ identified by ‘123456‘; 

flush privileges

2.18.外部软件登录数据库

 技术图片

2.19.测试成功

技术图片

 

3.源码安装常见报错信息

1:安装mysql报错

checking for tgetent in -lncurses... no

checking for tgetent in -lcurses... no

checking for tgetent in -ltermcap... no

checking for tgetent in -ltinfo... no

checking for termcap functions library... configure: error: No curses/termcap library found

原因:

缺少ncurses安装包

解决方法:

yum list|grep ncurses

yum -y install ncurses-devel

yum install ncurses-devel

2:.../depcomp: line 571: exec: g++: not found

make[1]: *** [my_new.o] 错误 127

make[1]: Leaving directory `/home/justme/software/mysql-5.1.30/mysys‘

make: *** [all-recursive] 错误 1

解决方法:

yum install gcc-c++

3:.../include/my_global.h:909: error: redeclaration of C++ built-in type `bool‘

make[2]: *** [my_new.o] Error 1

make[2]: Leaving directory `/home/tools/mysql-5.0.22/mysys‘

make[1]: *** [all-recursive] Error 1

make[1]: Leaving directory `/home/tools/mysql-5.0.22‘

make: *** [all] Error 2

是因为gcc-c++是在configure之后安装的,此时只需重新configure后再编译make即可。

4:初始化数据库报错

报错现象:

[email protected] mysql-6.0.11-alpha]# scripts/mysql_install_db --basedir=/usr/local/mysql/ --user=mysql

Installing MySQL system tables...

ERROR: 1136  Column count doesn‘t match value count at row 1

150414  7:15:56 [ERROR] Aborting

150414  7:15:56 [Warning] Forcing shutdown of 1 plugins

150414  7:15:56 [Note] /usr/local/mysql//libexec/mysqld: Shutdown complete

Installation of system tables failed!  Examine the logs in

/var/lib/mysql for more information.

You can try to start the mysqld daemon with:

shell> /usr/local/mysql//libexec/mysqld --skip-grant &

and use the command line tool /usr/local/mysql//bin/mysql

to connect to the mysql database and look at the grant tables:

shell> /usr/local/mysql//bin/mysql -u root mysql

mysql> show tables

Try ‘mysqld --help‘ if you have problems with paths.  Using --log

gives you a log in /var/lib/mysql that may be helpful.

The latest information about MySQL is available on the web at

http://www.mysql.com/.  Please consult the MySQL manual section

‘Problems running mysql_install_db‘, and the manual section that

describes problems on your OS.  Another information source are the

MySQL email archives available at http://lists.mysql.com/.

Please check all of the above before mailing us!  And remember, if

you do mail us, you MUST use the /usr/local/mysql//scripts/mysqlbug script!

原因:

原有安装的mysql信息没有删除干净

解决方法:

删除/var/lib/mysql目录

以上是关于mysql 多端口设置如开启3306,3307,3308端口后, 能否通过不同端口操作同一张表?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL5.7 多实例

mysql多实例

mysql-多实例

mysql多实例安装

MySQL多实例配置

MySQL多实例安装配置