前提:

我这里有两个节点,地址为202.207.178.6(主)和202.207.178.7(从)

(为了避免影响,首先关闭防火墙和selinux,并使两主机时间同步)

一、安装MySQL,我安装的版本是mysql-5.5.52-linux2.6-i686.tar.gz,可以在MySQL官网上下载。

主服务器:

1.将下载好的压缩包解压至/usr/local,并进入此目录

#tar xf mysql-5.5.52-linux2.6-i686.tar.gz -C /usr/local

#cd /usr/local/

2.为解压后的目录创建一个链接,并进入此目录

#ln -sv mysql-5.5.52-linux2.6-i686 mysql

#cd mysql

3.创建MySQL用户(使其成为系统用户)和MySQL组

#groupadd -r -g 306 mysql

#useradd -g 306 -r -u 306 mysql

4.使mysql下的所有文件都属于mysql用户和mysql组

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

5.创建数据目录,并使其属于mysql用户和mysql组,其他人无权限

#mkdir -p /mydata/data

#chown -R mysql:mysql /mydata/data/

#chmod o-rx /mydata/data/

6.准备就绪,开始安装

#scripts/mysql_install_db --user=mysql --datadir=/mydata/data/

7.安装完成后为了安全,更改/usr/local/mysql下所有文件的权限

#chown -R root:mysql /usr/local/mysql/*

8.准备启动脚本,并使其开机自动启动

#cp support-files/mysql.server /etc/init.d/mysqld

#chkconfig --add mysqld

#chkconfig --list mysqld

9.编辑数据库配置文件

#cp support-files/my-large.cnf /etc/my.cnf

#vim /etc/my.cnf,修改和添加以下内容:

datadir = /mydata/data

log-bin=master-bin

log-bin-index=master-bin.index

innodb_file_per_table = 1

sync-binlog = 1  #在主服务器上设定,使从服务器实时同步主服务器二进制日志,用于事务安全;

server-id = 1

11.提供执行相关命令所需的环境变量

#vim /etc/profile.d/mysql.sh

添加以下内容:

export PATH=$PATH:/usr/local/mysql/bin

12.至此,MySQL服务配置完成,可以启动测试

#service mysqld start

从服务器:

1.将下载好的压缩包解压至/usr/local,并进入此目录

#tar xf mysql-5.5.52-linux2.6-i686.tar.gz -C /usr/local

#cd /usr/local/

2.为解压后的目录创建一个链接,并进入此目录

#ln -sv mysql-5.5.52-linux2.6-i686 mysql

#cd mysql

3.创建MySQL用户(使其成为系统用户)和MySQL组

#groupadd -r -g 306 mysql

#useradd -g 306 -r -u 306 mysql

4.使mysql下的所有文件都属于mysql用户和mysql组

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

5.创建数据目录,并使其属于mysql用户和mysql组,其他人无权限

#mkdir -p /mydata/data

#chown -R mysql:mysql /mydata/data/

#chmod o-rx /mydata/data/

6.准备就绪,开始安装

#scripts/mysql_install_db --user=mysql --datadir=/mydata/data/

7.安装完成后为了安全,更改/usr/local/mysql下所有文件的权限

#chown -R root:mysql /usr/local/mysql/*

8.准备启动脚本,并使其开机自动启动

#cp support-files/mysql.server /etc/init.d/mysqld

#chkconfig --add mysqld

#chkconfig --list mysqld

9.编辑数据库配置文件

#cp support-files/my-large.cnf /etc/my.cnf

#vim /etc/my.cnf,修改和添加以下内容:

datadir = /mydata/data

relay-log = relay-log

relay-log-index = relay-log.index

server-id = 11

innodb_file_per_table = 1

read-only = ON#指定从服务器为只读,但对超级用户不生效

11.提供执行相关命令所需的环境变量

#vim /etc/profile.d/mysql.sh

添加以下内容:

export PATH=$PATH:/usr/local/mysql/bin

12.至此,MySQL服务配置完成,可以启动测试

#service mysqld start

二、配置主从复制(异步)

主服务器:

创建一个具有复制权限的用户:

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'202.207.178.%' IDENTIFIED BY 'replpass';

mysql> FLUSH PRIVILEGES;

从服务器:

查看change MASTER的帮助信息:

mysql> help change MASTER TO

在主节点上查看日志状态:

mysql> show master status;

+-------------------+----------+--------------+------------------+

| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+-------------------+----------+--------------+------------------+

| master-bin.000001 |      342 |              |                  |

+-------------------+----------+--------------+------------------+

在从节点上连接主节点

mysql> CHANGE MASTER TO MASTER_HOST='202.207.178.6',MASTER_USER='repluser',MASTER_PASSWORD='replpass',MASTER_LOG_FILE='master-bin.000002',MASTER_LOG_POS=343;

在从节点上启动IO_Thread和SQL_Thread:

mysql> START SLAVE;

或:

mysql> START SLAVE IO_Thread; 

mysql> START SLAVE SQL_Thread;

查看状态:

mysql> SHOW SLAVE STATUS\G

Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

主从复制正常!


三、配置主从复制(半同步)

半同步复制是基于Google为MySQL开发的半同步复制的插件。半同步复制的原理是,一个事务在主服务器上执行完成后,必须至少确保至少在一台从服务器上执行完成后,事务才算提交成功。如果在一定时间内从服务器没有响应,则会自动降级为异步复制。

这个半同步复制是建立在异步复制的基础之上进行的。

1.在Master和Slave的mysql命令行运行如下代码:

在Master:  

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';  

mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;  

mysql> SET GLOBAL rpl_semi_sync_master_timeout = 1000;  


在Slave : 

mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';  

mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;  

mysql> STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;(进行测试)  


2.在Master和Slave的my.cnf中编辑:


在Master : 

rpl_semi_sync_master_enabled=1  

rpl_semi_sync_master_timeout=1000 # 1 second  


在Slave  : 

rpl_semi_sync_slave_enabled=1  


3.测试:

查看从服务器上的semi_sync是否开启:

mysql> SHOW GLOBAL STATUS LIKE 'rpl_semi%';


查看主服务器上的semi_sync是否开启,注意clients 变为1 ,证明主从半同步复制连接成功:

mysql> SHOW GLOBAL STATUS LIKE 'rpl_semi%';


半同步复制正常!


                                   欢迎批评指正!