服务器说明:

  MySQL-Master:192.168.1.

  MySQL-Slave1:192.168.1.

  MySQL-Slave2:192.168.1.

关闭防火墙,关闭selinux

统一采用源码安装MySQL-5.6.16.tar.gz。具体的包可以百度或者官网下载(https://www.mysql.com/)

首先,在三台服务器上统一安装MySQL。具体过程如下

yum -y install make gcc-c++ cmake bison-devel  ncurses-devel
tar -zvxf mysql-5.6..tar.gz
cd mysql-5.6.
进行cmake编译
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE= \
-DWITH_INNOBASE_STORAGE_ENGINE= \
-DWITH_MEMORY_STORAGE_ENGINE= \
-DWITH_READLINE= \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DMYSQL_TCP_PORT= \
-DENABLED_LOCAL_INFILE= \
-DWITH_PARTITION_STORAGE_ENGINE= \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
安装
make && make install

使用下面的命令查看是否有mysql用户及用户组

cat /etc/passwd      #查看用户列表
cat /etc/group #查看用户组列表

如果没有就创建

groupadd mysql
useradd -g mysql mysql

修改/usr/local/mysql权限

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

初始化MySQL

cd /usr/local/mysql        #进入MySQL目录

scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql    
###################################################################################################
注:在启动MySQL服务时,会按照一定次序搜索my.cnf,先在/etc目录下找,找不到则会搜索"$basedir/my.cnf",在本例中就是 /usr/local/mysql/my.cnf,这是新版MySQL的配置文件的默认位置!
注意:在CentOS 6.4版操作系统的最小安装完成后,在/etc目录下会存在一个my.cnf,需要将此文件更名为其他的名字,如:/etc/my.cnf.bak,否则,该文件会干扰源码安装的MySQL的正确配置,造成无法启动 
在使用"yum update"更新系统后,需要检查下/etc目录下是否会多出一个my.cnf,如果多出,将它重命名成别的。否则,MySQL将使用这个配置文件启动,可能造成无法正常启动等问题
##################################################################################################
#注意:
初始化时可能会遇到报错,报错原因如下
scripts/mysql_install_db -bash: scripts/mysql_install_db: /usr/bin/perl: 坏的解释器: 没有那个文件或目录 解决办法:
yum install -y perl-Module-Install.noarch
重新执行初始化
cp support-files/mysql.server /etc/init.d/mysql         #拷贝启动脚本
chkconfig mysql on #添加开机自启
service mysql start --启动MySQL #启动MySQL

再启动过程中,发现启动失败一直报这个错误

Starting MySQL. ERROR! The server quit without updating PID file (/var/lib/mysql/xxxxxxxx.pid).

解决办法还是看我上面红框中的最后一句话,由于我的/etc/下有一个my.cnf 没有重命名,启动MySQL的时候会首先查看/etc,那么就会照成冲突,所以将/etc/my.cnf 备份为 my.cnf.bak。重新启动MySQL ok

MySQL启动成功后,root默认没有密码,我们需要设置root密码。

设置之前,我们需要先设置PATH,要不不能直接调用mysql

修改/etc/profile文件,在文件末尾添加

PATH=/usr/local/mysql/bin:$PATH
export PATH
退出后执行source /etc/profile
#登录mysql并修改密码
mysql
mysql> SET PASSWORD = PASSWORD('new password');

到这里MySQL就算是搭建完成了,接下来配置主从同步

首先创建授权账户

mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'192.168.1.136' IDENTIFIED BY 'slave1';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave2'@'192.168.1.140' IDENTIFIED BY 'slave2';

Master数据库退出MySQL,编辑/usr/local/mysql/my.cnf

[mysqld]              #在mysqld下面添加如下两行

server-id = 2
log-bin=mysql-bin
binlog-ignore-db=mysql  #忽略的数据库
binlog-ignore-db=information-schema

重启Master数据库

查看状态

mysql> show master status;
+------------------+----------+--------------+--------------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+--------------------------+-------------------+
| mysql-bin.000003 | 120 | | information_schema,mysql | |
+------------------+----------+--------------+--------------------------+-------------------+
1 row in set (0.00 sec)

同样将两台slave服务器也进行如下修改

编辑/usr/local/mysql/my.cnf文件

#slave1
[mysqld]
log-bin=mysql-bin
server-id=136
replicate_ignore_db=mysql #被忽略的数据库
replicate-ignore-db=information-schema
slave-skip-errors=all #跳过所有错误
#slave2
[mysqld]
log-bin=mysql-bin
server-id=140
replicate_ignore_db=mysql #被忽略的数据库
replicate-ignore-db=information-schema
slave-skip-errors=all #跳过所有错误

参数说明

replicate_do_db=db_name            #只复制db_name数据库
replicate_ignore_db=db_name #不复制db_name数据库
replicate_do_table=tb_name #复制tb_name表
replicate_ignore_table=tb_name #不复制tb_name表
replicate_wild_do_table=test% #复制以test为开头并且后面跟上任意
read-only=1 #只读

重新启动两台从库

分别在两台机器上操作stop slave;

然后在分别在两台机器上做如下操作

在slave1上操作

change master to master_host='192.168.1.142',
master_user='slave1',      #注意用户名
master_password='slave1',    #注意密码
master_log_file='mysql-bin.000003',
master_log_pos=120;

在slave2上操作

change master to master_host='192.168.1.142',
master_user='slave2', #注意用户名
master_password='slave2', #注意面
master_log_file='mysql-bin.000003',
master_log_pos=120;

分别在两台机器上操作start slave;

最后分别查看从库状态

mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.142
Master_User: slave1
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 120
Relay_Log_File: elk-node2-relay-bin.000002
Relay_Log_Pos: 283
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB: mysql,information-schema
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 120
Relay_Log_Space: 460
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 2
Master_UUID: 780d388c-7040-11e7-b42a-000c29199d74
Master_Info_File: /usr/local/mysql/data/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
1 row in set (0.00 sec)

slave1

mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.142
Master_User: slave2
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 120
Relay_Log_File: controller01-relay-bin.000002
Relay_Log_Pos: 283
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB: mysql,information-schema
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 120
Relay_Log_Space: 463
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 2
Master_UUID: 780d388c-7040-11e7-b42a-000c29199d74
Master_Info_File: /usr/local/mysql/data/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
1 row in set (0.00 sec)

slave2

通过主库查看从库状态

mysql> show slave hosts;
+-----------+------+------+-----------+--------------------------------------+
| Server_id | Host | Port | Master_id | Slave_UUID |
+-----------+------+------+-----------+--------------------------------------+
| 136 | | 3306 | 2 | 8346c426-7040-11e7-b42a-000c29dcd50c |
| 140 | | 3306 | 2 | 8d82f208-7040-11e7-b42a-000c29e2e25f |
+-----------+------+------+-----------+--------------------------------------+
2 rows in set (0.00 sec)

ps:可能执行show slave status;时发现 Slave_IO_Running: Connecting。解决方法,首先查看用户名密码是否正确,各主机之间是否能ping同,防火墙是否关闭,博主在做实验的时候就没有关闭防火墙导致一直连接不上。

测试

在Master数据库创建一个测试库与测试表

/*创建库*/
mysql> CREATE database test_mysql;
/*创建表*/
mysql> create table python_one(
-> id int(11)
-> name varchar(255)
-> );
/*插入两条数据*/
INSERT INTO python_one(id,name,) value(1,'字典');
INSERT INTO python_one(id,name,) value(2,'函数');
/*查看数据*/
mysql> SELECT * FROM python_one;
+------+--------+
| id | name |
+------+--------+
| 1 | 字典 |
| 2 | 函数 |
+------+--------+
2 rows in set (0.01 sec)

分别在两个从库上面查看数据

Slave1

mysql> SELECT * FROM test_mysql.python_one;
+------+--------+
| id | name |
+------+--------+
| 1 | 字典 |
| 2 | 函数 |
+------+--------+
2 rows in set (0.00 sec)

Slave2

mysql> SELECT * FROM test_mysql.python_one;
+------+--------+
| id | name |
+------+--------+
| 1 | 字典 |
| 2 | 函数 |
+------+--------+
2 rows in set (0.00 sec)

测试结果没有问题,一主多从就搭建完成了

MySQL一主两从的更多相关文章

  1. 高可用Mysql架构_Mycat集群部署(HAProxy + 两台Mycat+Mysql双主双从)

    既然大家都知道了Mysql分布式在大型网站架构中的作用,在这里就不再阐述.本片博客文章是基于我曾经搭建过的一个Mysql集群基础上实现的,实现过双主热备.读写分离.分库分表. 博客链接:http:// ...

  2. MySQL优化聊两句

    原文地址:http://www.cnblogs.com/verrion/p/mysql_optimised.html MySQL优化聊两句 MySQL不多介绍,今天聊两句该如何优化以及从哪些方面入手, ...

  3. MySQL双主(主主)架构方案

    在企业中,数据库高可用一直是企业的重中之重,中小企业很多都是使用mysql主从方案,一主多从,读写分离等,但是单主存在单点故障,从库切换成主库需要作改动.因此,如果是双主或者多主,就会增加mysql入 ...

  4. Centos7 下配置mysql5.6主从复制实例(一主两从)

    标签:mysql 数据库 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://8941355.blog.51cto.com/89313 ...

  5. 分布式数据存储 - MySQL双主复制

    上篇文章<分布式数据存储 - MySQL主从复制>,我们说到MySQL主从复制很好的保障了从库,读的高可用性.so,问题来了: 1.针对主库,写的高可用性又是如何做到高可用性? 2.如果需 ...

  6. Keepalived+MySQL双主

    一.Keepalived+MySQL Replication的应用场景 MySQL的高可用方案有cluster,MMM,MHA等,这些高可用方案都要三台服务器以上,成本有点高,今天介绍一个低成本高可用 ...

  7. MySQL集群(四)之keepalived实现mysql双主高可用

    前面大家介绍了主从.主主复制以及他们的中间件mysql-proxy的使用,这一篇给大家介绍的是keepalived的搭建与使用! 一.keepalived简介 1.1.keepalived介绍 Kee ...

  8. 配置mysql为主主复制步骤

    mysql版本:mysql-5.6.24-solaris10-sparc-64bit.tar 操作系统:solaris 11g u10 操作用户:使用非root进行操作安装,a路服务器ip地址为192 ...

  9. 阿里云ECS服务器上搭建keepalived+mha+mysql5.6+gtid+一主两从+脚本判断架构踩的坑

    最近,公司项目搭建了一套后端数据库架构,不是在RDS,是在阿里云的ECS服务器上搭建keepalived.mha.mysql5.6.gtid.一主两从架构,目前还没有实现读写分离,以后架构升级,可能代 ...

随机推荐

  1. PHP5.4 连接 SQL SERVER 2008

    PHP链接sqlserver需要先安装驱动,不是先把dll放到ext下面,一重启服务器就完事了. 本地环境: XAMPP 1.8.2 PHP 5.4.31 SQL SERVER 2008 R2 使用的 ...

  2. (一)SpringBoot2.0基础篇- 介绍及HelloWorld初体验

    1.SpringBoot介绍: 根据官方SpringBoot文档描述,BUILD ANYTHING WITH SPRING BOOT (用SPRING BOOT构建任何东西,很牛X呀!),下面是官方文 ...

  3. 【vijos1049】送给圣诞夜的礼品

    题面 描述 当小精灵们把贺卡都书写好了之后.礼品准备部的小精灵们已经把所有的礼品都制作好了.可是由于精神消耗的缘故,他们所做的礼品的质量越来越小,也就是说越来越不让圣诞老人很满意.可是这又是没有办法的 ...

  4. html学习第一天

    由于之后想做个网站,所以web前端的也要学习一下. 昨天看了一下html,今天做一下记录. 首先是安装工具,用文本编辑器有点麻烦,我选择的是强大的 Dreamweaver CS6,不过大家喜欢文本编辑 ...

  5. JavaWeb(三十五)——使用JDBC处理Oracle大数据

    一.Oracle中大数据处理 在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了.因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种 ...

  6. Vue 数组封装和组件data定义为函数一些猜测

     数组封装 var vm={ list:[0,1] } var push=vm.list.push;//把数组原来的方法存起来 vm.list.push=function(arg){//重新定义数组的 ...

  7. JavaScript的数组和字符串应用

    函数search实现在一个已排序的数字类型数组中查找指定数字的功能. 可以采用数组的内置方法,二分查找法等进行操作 //方法一 var search = function(arr,dst){ var ...

  8. localhost/127.0.0.1/本机IP的区别以及端口号

    端口号: http请求默认的端口是:80 PHPstudy中的端口号: Apache服务器的端口是:80 MySQL数据库的端口是:3306 PHP项目端口是:9000 禅道中的端口号: Apache ...

  9. phpcms v9如何给父级单页栏目添加内容

    对于phpcms单页的调用相信大家都应该没问题,那么如果我们在后台添加的单页有二层甚至更多的时候,这样在管理内容上是没有给父级栏目添加内容这一功能的!那么我们该怎么实现这个功能并调用呢? 首先我们要修 ...

  10. 创建image

    摘要: 本节演示如何通过 Web GUI 和 CLI 两种方法创建 Image. 本节演示如何通过 Web GUI 和 CLI 两种方法创建 Image. OpenStack 为终端用户提供了 Web ...