一台服务器多实例mysql做主从复制
在一台服务器上开两个端口的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做主从复制的更多相关文章
- 使用 Xtrabackup 在线对MySQL做主从复制【转】
1. 说明 1.1 xtrabackup mysqldump对于导出10G以下的数据库或几个表,还是适用的,而且更快捷.一旦数据量达到100-500G,无论是对原库的压力还是导出的性能,mysqldu ...
- Mysql主从(主从不同步解决办法,常见问题及解决办法,在线对mysql做主从复制)
一.主从不同步解决办法 先上Master库: mysql>show processlist; 查看下进程是否Sleep太多.发现很正常. show master status; 也正常. mys ...
- 使用 Xtrabackup 在线对MySQL做主从复制
1. 说明 1.1 xtrabackup mysqldump对于导出10G以下的数据库或几个表,还是适用的,而且更快捷.一旦数据量达到100-500G,无论是对原库的压力还是导出的性能,mysqldu ...
- 在多台服务器上简单实现Redis的数据主从复制(3)(转载)
转载地址:http://www.cnblogs.com/liping13599168/archive/2011/04/14/2016226.html Redis的主从复制功能非常强大,一个master ...
- 在多台服务器上简单实现Redis的数据主从复制
Redis的主从复制功能非常强大,一个master可以拥有多个slave,而一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构.下面我演示下怎样在多台服务器上 ...
- Mysql中主从复制的原理、配置过程以及实际案例
Mysql中主从复制的原理.配置过程以及实际案例1.什么是主从复制?原理:主从分离,什么意思呢?我们不妨画个图看看.如图1所示: 2.准备工作:预备两台服务器,我这里使用虚拟机安装了两个Centos6 ...
- 为什么mysql要做主从复制?
为什么MySQL要做主从复制(读写分离)? 通俗来讲,如果对数据库的读和写都在同一个数据库服务器中操作,业务系统性能会降低. 为了提升业务系统性能,优化用户体验,可以通过做主从复制(读写分离)来减轻主 ...
- Amazon EC2安装mysql多实例并配置主从复制
1.MySQL安装: EC2直接使用yum安装mysql很方便: yum install mysql mysql-server mysql-libs 此处安装了三个包 完事之后可以直接使用 servi ...
- Linux两台服务器mysql数据库同步
我们在做web系统部署的时候往往涉及到两台甚至多台数据库的备份,为了数据安全考虑(虽然说到底不过是一堆0 1,但是价值千金啊),所以我们还是乖乖做同步把! 1.准备两台Linux服务器(主.从) 2. ...
随机推荐
- IDEA设置注释的颜色
IDEA默认的灰色注释确实让人看不清,但如果把灰色调成黑色又和代码的颜色相同了,所以,不如给注释添加上绿色的背景,又护眼又容易分辨 新版本的IDEA打开Settings——Editot——Color ...
- 17秋 软件工程 团队第五次作业 Alpha Scrum11
17秋 软件工程 团队第五次作业 Alpha Scrum11 今日完成的任务 世强:管理员头像图片上传和显示逻辑处理,活动添加及上传图片: 港晨:完成Web界面前后端对接: 树民:标准化后端接口格式: ...
- redis缓存设计
1:缓存技术和框架的重要性 互联网的一些高并发,高性能的项目和系统中,缓存技术是起着功不可没的作用.缓存不仅仅是key-value的简单存取,它在具体的业务场景中,还是很复杂的,需要很强的架构设计能力 ...
- 转://三分钟读懂Oracle数据库容灾架之DataGuard
目前市场上针对Oracle数据库常见的容灾产品大致可以分为两大类. Oracle 公司自己的容灾产品 非Oracle公司的容灾产品 Oracle公司目前的容灾产品有我们常见的DataGuard和属于中 ...
- Color the ball HDU - 1556 (非线段树做法)
题意:在1到n的气球中,在不同的区域中涂颜色,问每个气球涂几次. #include<cstdio>int num[100010];int main(){ int n, x, y;; whi ...
- mysql用户操作、权限分配、远程登录设置
对最近mysql的常用运维命令进行整理 查看使用的哪个配置文件启动的mysql 1. ps aux|grep mysql|grep 'my.cnf' 如果启动的命令中选择了配置文件,则可以查询出来,也 ...
- 以太坊中的Ghost协议
https://blog.csdn.net/t46414704152abc/article/details/81191804 写得超好,终于弄懂了什么是叔块,怎么确定哪条链最长,以太坊与比特币出块的差 ...
- PAT A1026 Table Tennis (30 分)——队列
A table tennis club has N tables available to the public. The tables are numbered from 1 to N. For a ...
- ASP.NET 文件操作类
1.读取文件 2.写入文件 using System; using System.Collections.Generic; using System.IO; using System.Linq; us ...
- 【Codeforces Round 464】Codeforces #265 (Div. 1)
模拟RD265 ABC三题,Rank58 Codeforces 464 A 题意:给定一个字符串,求比这个字符串字典序大并且和它长度相等的第一个不含有长度大于等于2的回文串的字符串. 思路:首先我们枚 ...