在一台服务器上开两个端口的mysql(3306、3307),做成主从复制环境

1)安装mysql(安装过程这里就不做过多介绍)
参考:http://www.cnblogs.com/kevingrace/p/6109679.html 本文在一台服务器上做主从实验
主库:172.29.16.24:3306
从库:172.29.16.24:3307 主从库的安装目录分别为/usr/local/mysql3306、/usr/local/mysql3307
主从库的数据目录分别为/data/mysql3306、/data/mysql3307
主从库的登录密码都为123456 两个实例的my.cnf里不一样的配置部分
端口不一样!另外:server-id一定不能一样,最好用端口号来标明server-id,一个是3306,一个是3307
其他内容配置一样,主库一定要开启binlog日志功能,从库可以开启,也可以不开启)
[root@radius01 ~]# cat /usr/local/mysql3306/my.cnf |grep mysql3306
socket = /usr/local/mysql3306/var/mysql.sock
socket = /usr/local/mysql3306/var/mysql.sock
basedir = /usr/local/mysql3306/
datadir = /data/mysql3306/data
pid-file = /data/mysql3306/data/mysql.pid
log_error = /data/mysql3306/data/mysql-error.log
slow_query_log_file = /data/mysql3306/data/mysql-slow.log [root@radius01 ~]# cat /usr/local/mysql3307/my.cnf |grep mysql3307
socket = /usr/local/mysql3307/var/mysql.sock
socket = /usr/local/mysql3307/var/mysql.sock
basedir = /usr/local/mysql3307/
datadir = /data/mysql3307/data
pid-file = /data/mysql3307/data/mysql.pid
log_error = /data/mysql3307/data/mysql-error.log
slow_query_log_file = /data/mysql3307/data/mysql-slow.log 注意分别授权
[root@radius01 ~]# chown -R mysql.mysql /usr/local/mysql3306
[root@radius01 ~]# chown -R mysql.mysql /usr/local/mysql3307
[root@radius01 ~]# chown -R mysql.mysql /data/mysql3306/
[root@radius01 ~]# chown -R mysql.mysql /data/mysql3307 启动主从库
[root@radius01 ~]# nohup /usr/local/mysql3306/bin/mysqld_safe --datadir=/data/mysql3306/data --pid-file=/data/mysql3306/data/mysql.pid &
[root@radius01 ~]# nohup /usr/local/mysql3307/bin/mysqld_safe --datadir=/data/mysql3307/data --pid-file=/data/mysql3307/data/mysql.pid &
[root@radius01 ~]# lsof -i:3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 28617 mysql 19u IPv4 838860 0t0 TCP *:mysql (LISTEN)
[root@radius01 ~]# lsof -i:3307
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 29538 mysql 19u IPv4 839401 0t0 TCP *:opsession-prxy (LISTEN) 注意,当一台服务器上安装了多个实例的mysql的时候,直接登录mysql的时候,记住要在登录命令中跟上对应的sock路径,如下:
[root@radius01 ~]# /usr/local/mysql3306/bin/mysql -p123456 -S /usr/local/mysql3306/var/mysql.sock
......
mysql> select @@port;
+--------+
| @@port |
+--------+
| 3306 |
+--------+
1 row in set (0.00 sec) [root@radius01 ~]# /usr/local/mysql3307/bin/mysql -p123456 -S /usr/local/mysql3307/var/mysql.sock
......
mysql> select @@port;
+--------+
| @@port |
+--------+
| 3307 |
+--------+
1 row in set (0.00 sec)
------------------------------------------------------------------------------------------------------------------------
如果不跟上对应的sock路径,直接登录的话会报错:
[root@radius01 ~]# /usr/local/mysql3306/bin/mysql -p123456
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'
这样,如果你如下做软链接:
[root@radius01 ~]# ln -s /usr/local/mysql3306/var/mysql.sock /var/lib/mysql/mysql.sock
或者
[root@radius01 ~]# ln -s /usr/local/mysql3307/var/mysql.sock /var/lib/mysql/mysql.sock 那么这样操作之后,无论是登录3306端口的mysql,还是登录3307端口的mysql,里面的操作都是一样的,即这样就分不清两个端口的mysql实例了!
所以还是在登录各个端口的mysql实例时要跟上对应的sock路径! 2)部署主从复制环境
先在主库上操作:
[root@radius01 ~]# /usr/local/mysql3306/bin/mysql -p123456 -S /usr/local/mysql3306/var/mysql.sock
......
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'172.29.16.%' IDENTIFIED BY 'mycatms';
mysql> flush privileges;
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000015 | 199 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec) 接着在从库(即33077端口)上设置主从复制
先在从库上验证下是否能使用授予的权限连接主库
[root@radius01 ~]# /usr/local/mysql3307/bin/mysql -u repl -h 172.29.16.24 -pmycatms -S /usr/local/mysql3306/var/mysql.sock
.....
mysql> select @@port;
+--------+
| @@port |
+--------+
| 3306 |
+--------+
1 row in set (0.00 sec) 然后进行主从复制设置
[root@radius01 ~]# /usr/local/mysql3307/bin/mysql -p123456 -S /usr/local/mysql3307/var/mysql.sock
.......
mysql> select @@port;
+--------+
| @@port |
+--------+
| 3307 |
+--------+
1 row in set (0.00 sec)
mysql> stop slave;
mysql> reset slave;
mysql> change master to master_user='repl', master_password='mycatms', master_host='172.29.16.24',master_port=3306, master_log_file='mysql-bin.000015',master_log_pos=199;
mysql> start slave;
mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.29.16.24
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000015
Read_Master_Log_Pos: 199
Relay_Log_File: mysql-relay-bin.000002
Relay_Log_Pos: 283
Relay_Master_Log_File: mysql-bin.000015
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
.......
.......
-------------------------------------------------------------------------------------------------------------------------------------
如果出现下面报错:
Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. 原因分析:
mysql 5.6的复制引入了uuid的概念,各个复制结构中的server_uuid得保证不一样,但是查看到直接copy data文件夹后server_uuid是相同的,show variables like '%server_uuid%';
也就是说:
我的实验环境中的3306端口的mysql实例和3307端口的mysql实例的uuid是一样的导致的,因为我是直接复制的data数据目录。如下查看:
[root@radius01 ~]# /usr/local/mysql3306/bin/mysql -p123456 -S /usr/local/mysql3306/var/mysql.sock
.........
mysql> show variables like '%server_uuid%';
+---------------+--------------------------------------+
| Variable_name | Value |
+---------------+--------------------------------------+
| server_uuid | 5509fe69-96b6-11e7-aef5-aaafa07a2e23 |
+---------------+--------------------------------------+
1 row in set (0.00 sec) [root@radius01 ~]# /usr/local/mysql3307/bin/mysql -p123456 -S /usr/local/mysql3307/var/mysql.sock
......
mysql> show variables like '%server_uuid%';
+---------------+--------------------------------------+
| Variable_name | Value |
+---------------+--------------------------------------+
| server_uuid | 5509fe69-96b6-11e7-aef5-aaafa07a2e23 |
+---------------+--------------------------------------+
1 row in set (0.00 sec) 解决办法:
找到3306端口和3307端口的data文件夹下的auto.cnf文件,直接删除掉,然后重启各自的mysql即可!重启后,可以再次生成auto.conf文件(重新生成后的uuid就不一样了)
[root@radius01 ~]# rm -rf /data/mysql3306/data/auto.cnf
[root@radius01 ~]# rm -rf /data/mysql3307/data/auto.cnf
[root@radius01 ~]# nohup /usr/local/mysql3306/bin/mysqld_safe --datadir=/data/mysql3306/data --pid-file=/data/mysql3306/data/mysql.pid &
[root@radius01 ~]# nohup /usr/local/mysql3307/bin/mysqld_safe --datadir=/data/mysql3307/data --pid-file=/data/mysql3307/data/mysql.pid &
[root@radius01 ~]# cat /data/mysql3306/data/auto.cnf
[auto]
server-uuid=f6a726d2-96fd-11e7-b0c8-aaafa07a2e23
[root@radius01 ~]# cat /data/mysql3307/data/auto.cnf
[auto]
server-uuid=fc6ee68c-96fd-11e7-b0c8-aaafa07a2e23
------------------------------------------------------------------------------------------------------------------------------------- 数据同步测试:
在主库里写入新数据
[root@radius01 ~]# /usr/local/mysql3306/bin/mysql -p123456 -S /usr/local/mysql3306/var/mysql.sock
mysql> create database wangshibo;
mysql> use wangshibo;
mysql> create table tehui(
-> id int not null primary key,
-> name varchar(10));
mysql> insert into tehui values(1,"huanhuan");
mysql> insert into tehui values(11,"meimei");
mysql> select * from tehui;
+----+----------+
| id | name |
+----+----------+
| 1 | huanhuan |
| 11 | meimei |
+----+----------+
2 rows in set (0.00 sec) 在从库查看是否已同步
[root@radius01 ~]# /usr/local/mysql3307/bin/mysql -p123456 -S /usr/local/mysql3307/var/mysql.sock
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| wangshibo |
+--------------------+
5 rows in set (0.00 sec) mysql> use wangshibo;
mysql> show tables;
+---------------------+
| Tables_in_wangshibo |
+---------------------+
| tehui |
+---------------------+
1 row in set (0.00 sec) mysql> select * from tehui;
+----+----------+
| id | name |
+----+----------+
| 1 | huanhuan |
| 11 | meimei |
+----+----------+
2 rows in set (0.00 sec)

一台服务器多实例mysql做主从复制的更多相关文章

  1. 使用 Xtrabackup 在线对MySQL做主从复制【转】

    1. 说明 1.1 xtrabackup mysqldump对于导出10G以下的数据库或几个表,还是适用的,而且更快捷.一旦数据量达到100-500G,无论是对原库的压力还是导出的性能,mysqldu ...

  2. Mysql主从(主从不同步解决办法,常见问题及解决办法,在线对mysql做主从复制)

    一.主从不同步解决办法 先上Master库: mysql>show processlist; 查看下进程是否Sleep太多.发现很正常. show master status; 也正常. mys ...

  3. 使用 Xtrabackup 在线对MySQL做主从复制

    1. 说明 1.1 xtrabackup mysqldump对于导出10G以下的数据库或几个表,还是适用的,而且更快捷.一旦数据量达到100-500G,无论是对原库的压力还是导出的性能,mysqldu ...

  4. 在多台服务器上简单实现Redis的数据主从复制(3)(转载)

    转载地址:http://www.cnblogs.com/liping13599168/archive/2011/04/14/2016226.html Redis的主从复制功能非常强大,一个master ...

  5. 在多台服务器上简单实现Redis的数据主从复制

          Redis的主从复制功能非常强大,一个master可以拥有多个slave,而一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构.下面我演示下怎样在多台服务器上 ...

  6. Mysql中主从复制的原理、配置过程以及实际案例

    Mysql中主从复制的原理.配置过程以及实际案例1.什么是主从复制?原理:主从分离,什么意思呢?我们不妨画个图看看.如图1所示: 2.准备工作:预备两台服务器,我这里使用虚拟机安装了两个Centos6 ...

  7. 为什么mysql要做主从复制?

    为什么MySQL要做主从复制(读写分离)? 通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低. 为了提升业务系统性能,优化用户体验,可以通过做主从复制(读写分离)来减轻主 ...

  8. Amazon EC2安装mysql多实例并配置主从复制

    1.MySQL安装: EC2直接使用yum安装mysql很方便: yum install mysql mysql-server mysql-libs 此处安装了三个包 完事之后可以直接使用 servi ...

  9. Linux两台服务器mysql数据库同步

    我们在做web系统部署的时候往往涉及到两台甚至多台数据库的备份,为了数据安全考虑(虽然说到底不过是一堆0 1,但是价值千金啊),所以我们还是乖乖做同步把! 1.准备两台Linux服务器(主.从) 2. ...

随机推荐

  1. MVC| NuGet安装相关工具包

    ----------------------------------------------Ninject----------------------------------------------- ...

  2. ws协议的配置

    server { listen 80; server_name 域名或IP; rewrite ^(.*)$ https://$host$1 permanent; } server { listen 4 ...

  3. QSetting的值不能保存。

    最近在使用QSetting的时候,setting的值死活保存不下来,后来添加了如何设置后,settting的可以获取到. QCoreApplication::setOrganizationName(& ...

  4. 05LaTeX学习系列之---TeX的命令行操作

    目录 目录 前言 (一)查看版本号 1.查看TeX的版本号 2.查看LaTeX的版本号 3.查看XeLeTeX的版本号 (二)更行版本 (三)用命令行来编译.tex文件 1.用LaTeX编译 2.用X ...

  5. 描述整体程序的 app

    一个小程序主体部分由三个文件组成,必须放在项目的根目录,如下 app.js文件 App() 函数用来注册一个小程序.接受一个 object 参数,其指定小程序的生命周期函数等.object参数说明如下 ...

  6. Django REST framework 之分页,视图,路由,渲染器

    1.分页 2.视图 3.路由 4.渲染器 1.分页 方法一: from django.shortcuts import render from rest_framework.versioning im ...

  7. P1802 5倍经验日(01背包问题,水题)

    题目背景 现在乐斗有活动了!每打一个人可以获得5倍经验!absi2011却无奈的看着那一些比他等级高的好友,想着能否把他们干掉.干掉能拿不少经验的. 题目描述 现在absi2011拿出了x个迷你装药物 ...

  8. 【SpringMVC】关于classpath和contextConfigLocation

    [SpringMVC]关于classpath和contextConfigLocation 2017年11月16日 12:05:47 yongh701 阅读数:3624    版权声明:本文为博主原创文 ...

  9. go标准库的学习-net/rpc/jsonrpc

    参考:https://studygolang.com/pkgdoc 导入方式: import "net/rpc/jsonrpc" jsonrpc包实现了JSON-RPC的Clien ...

  10. the security of smart contract- 2

    出处:https://cloud.tencent.com/developer/article/1192548 深度解析Solidity的17个坑及超详细避坑指南 写的很好,好好学习 1. Re-Ent ...