前提:
我这里有两个节点,地址为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%';
半同步复制正常!
欢迎批评指正!