mysql主从复制
1、主从服务器版本一致(主版本可低于从版本)
2、网络连通性
3、一个拥有复制权限的账户,便于从服务器进行复制
4、干净的环境,没有RPM包安装过的mysql
版本:5.6.13
二进制版本:
http://dev.mysql.com/downloads/mirror.php?id=413946
源码版本
http://dev.mysql.com/downloads/mirror.php?id=413981
-1 mysql的安装
groupadd mysql
useradd -g mysql mysql
tar xv mysql*
cd mysql*
*******************************编译安装*********************************
(若为二进制版本,则不需要这一步)
cmake .
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_DEBUG=0 \
-DMYSQL_USER=mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
(配置文件不满意,可以删除目录下的CMakeCache.txt)
make && make install
*******************************配置mysql*******************************
cd /usr/local/mysql
cp support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 2345 mysqld on
cp support-files/my-medium.cnf /etc/my.cnf(版本5.6.13没有找到模版,复制default)
*******************************配置mysql*******************************
log_bin = /usr/local/mysql/log/mysql-bin
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
server_id = 1
socket = /tmp/mysql.sock
*******************************初始化mysql******************************
scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
*******************************data和log写权限***************************
chown -R root:mysql /usr/local/mysql
chown -R mysql:mysql /usr/local/mysql/data
chown -R mysql:mysql /usr/local/mysql/log
*******************************环境变量*********************************
vim ~/.bash_profile
PATH=$PATH:$home/bin:/usr/local/mysql/bin:/usr/local/mysql/lib
source /root/.bash_profile
-2 服务器配置文件
--1 主服务器(需重启mysql)(定义事物提交后将日志从内存转移至磁盘,同时立即刷新日志,将数据写入磁盘)
log-bin=mysql-bin
server-id=1
sync-binlog=1
innodb-flush-logs-at-trx-commit=1
--2 从服务器(需重启mysql)(定义从服务器只读,并关闭bin日志,同时slave服务定义为手动)
#log-bin=
relay-log=relay-bin
relay-log-index=relay-bin.index
server-id=11
skip-slave-start=1
read-only=1
-3 mysql配置
--1 主服务器(192.168.1.1)授权,获取最后阶段的日志记录位置,并备份当前数据库(--lock-all-tables备份前锁表,备份后自动解锁;--master-data=2 记录CHANGE MASTER TO MASTER_LOG_FILE和MASTER_LOG-POS)
mysql -uroot
>grant replication client,replication slave on *.* to repl@'192.168.1.%' identified by '123456';
>show master status;
>
*************************** 1. row ***************************
File: mysql-bin.000009
Position: 107
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)
>\q
mysqldump --all-databases --lock-all-tables --master-data=2 -p密码 > /root/slave.sql
scp /root/slave.sql root@192.168.1.1:/usr/local/mysql
--2 从服务器(192.168.1.2)恢复数据库,设置连接属性,并开启复制
mysql -uroot
>source /usr/local/mysql;
>change master to MASTER_HOST='192.168.1.1',MASTER_USER='repl',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000009',MASTER_LOG_POS='107';
>start slave;
-4 半同步模式(降低同步延迟问题)
--1 半同步模式需要插件支持,默认插件位置在/usr/local/mysql/lib/plugin
--2 主服务器
mysql -uroot
>install plugin rpl_semi_sync_master scname 'semisync_master.so';
>set global rpl_semi_sync_master_enable=1;
>set global rpl_semi_sync_master_timeout=1000;
--3 从服务器
mysql -uroot
>install plugin rpl_semi_sync_slave scname 'semisync_slave.so';
>set global rpl_semi_sync_slave_enable=1;
>set global rpl_semi_sync_slave_timeout=1000;
>stop slave;
>start slave;
-5 监控状态
--1 主从复制异步重要变量
>show slave status;
获取如下,两个皆为yes正常,有一个不为yes,则有问题
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
--2 半同步重要变量
重要变量:
>show global variables like 'rpl_%';
获取如下
表明连接slave数量
rpl_semi_sync_master_client=n
表明半同步是否启用,1活动,0非活动
rpl_semi_sync_master_status=1
表明半同步是否启用。I/O线程是否启用,1活动,0非活动
rpl_semi_sync_slave_status=1