Mysql5互为主从及半同步复制

 

[Mysql5.5编译安装]]
mysql5.5 Cmake编译参数
 cmake -DCMAKE_INSTALL_PREFIX=/opt/mysql -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -
DWITH_EXTRA_CHARSETS=all -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1 -
DMYSQL_DATADIR=/opt/mysql/data -DWITH_DEBUG=0
 -DDEFAULT_CHARSET=gbk  -DDEFAULT_COLLATION=gbk_chinese_ci  -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -
DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 -DWITHOUT_PARTITION_STORAGE_ENGINE=1
 CMAKE_INSTALL_PREFIX:指定MySQL程序的安装目录,默认/usr/local/mysql
 DEFAULT_CHARSET:指定服务器默认字符集,默认latin1
 DEFAULT_COLLATION:指定服务器默认的校对规则,默认latin1_general_ci
 ENABLED_LOCAL_INFILE:指定是否允许本地执行LOAD DATA INFILE,默认OFF
 WITH_COMMENT:指定编译备注信息
 WITH_xxx_STORAGE_ENGINE:指定静态编译到mysql的存储引擎,MyISAM,MERGE,MEMBER以及CSV四种引擎默认即被编译至服务器,不需要特别指定。
 WITHOUT_xxx_STORAGE_ENGINE:指定不编译的存储引擎
 SYSCONFDIR:初始化参数文件目录
 MYSQL_DATADIR:数据文件目录
 MYSQL_TCP_PORT:服务端口号,默认3306
 MYSQL_UNIX_ADDR:socket文件路径,默认/tmp/mysql.sock
make && make install
chown -R mysql:mysql /opt/mysql
scripts/mysql_install_db  --user=mysql --basedir=/opt/mysql --datadir=/opt/mysql/data 这里顺序很重要不然报错
cp support-files/my-medium.cnf /opt/mysql/my.cnf
cd /opt/mysql/support-files/
cp ./mysql.server /etc/init.d/mysql5 
chmod 755 /etc/init.d/mysql5
chkconfig --levle 35 mysql5 on
在my.cnf的[mysqld]中添加 skip-name-resolve
service mysql5 start
[Mysql主从]
(主从分为标为AB)
1.修改A配置文件(my.cnf)
 skip-name-resolve
 skip-locking
 log-bin=mysql-bin 启动二进制日志记录
 binlog-do-db=test 设置需要记录bin-log的库
 binlog-ignore-db=mysql 设置不需要bin-log的库
 replicate-do-db=test 设置允许复制同步的库
 replicate-ignore-db=mysql 设置不允许同步复制的库
 server-id = 1  服务器ID 从主不能相同
 slave-skip-errors=all
 sync_binlog=0
 
2.启动A(启动前最好阻止外部连接到主库)并进入命令行
 grant replication slave,file on *.* to 'repl'@'B地址' identified by 'pass'; 建立从库同步复制账号
 flush privileges; 刷新使账号立即生效
 flush tables with read lock; 全局读锁定
 show master status; 记录bin-log文件名和log-post位移量
 
3.备份A
 mysqldump -uroot -p --quick --single-transaction --master-data=1 --default-character-set=utf8  dbname > databases.sql #innodb
 mysqldump -uroot -p --opt --default-character-set=utf8  dbname > databases.sql  #myisam
 unlocak tables;  备份完后可以解除锁定
 
4.B导入
 mysqldump -uroot -p dbname < databases.sql
5.修改B配置文件(my.cnf)
 skip-name-resolve
 skip-locking
 log-bin=mysql-bin 启动二进制日志记录
 binlog-do-db=test 设置需要记录bin-log的库
 binlog-ignore-db=mysql 设置不需要bin-log的库
 replicate-do-db=test 设置允许复制同步的库
 replicate-ignore-db=mysql 设置不允许同步复制的库
 #log_slave_updates 从服务器写入relay-bin日志同时写到数据库的bin-log日志
 server-id = 1  服务器ID 从主不能相同
 slave-skip-errors=all
 sync_binlog=0
6.用--skip-slave-start选项启动从服务器
 CHANGE MASTER TO MASTER_HOST='A地址',\
 MASTER_USER='repl', MASTER_PASSWORD='slavepass', \
 MASTER_LOG_FILE='bin-log-name', \
 MASTER_LOG_POS=log_post,MASTER_CONNECT_RETRY=30;
 
7.slave start 启动B
 show slave status\G
 show processlist;
8.测试同步复制
 
[Mysql互为主从]
在主从基础上进行(主从分为标为AB)
1.修改A配置文件(my.cnf)
 log_slave_updates 服务器写入relay-bin日志同时写到数据库的bin-log日志
 auto_increment_increment=2 #自增涨增量
 auto_increment_offset=1 #初始起点值
2.修改B配置文件
 auto_increment_increment=2 #自增涨增量
 auto_increment_offset=1 #初始起点值
 重启数据库
3.B(启动前最好阻止外部连接到B)并进入命令行
 grant replication slave,file on *.* to 'rep2'@'A' identified by 'pass'; 建立同步复制账号
 flush privileges; 刷新使账号立即生效
 flush tables with read lock; 全局读锁定
 show master status; 记录bin-log文件名和log-post位移量

4.用--skip-slave-start选项启动A服务器
 service mysql5 stop
 mysqld_safe --user=mysql --skip-slave-start&
5.设置同步信息
 CHANGE MASTER TO MASTER_HOST='B地址',
 MASTER_USER='repl',
 MASTER_PASSWORD='slavepass',
 MASTER_LOG_FILE='bin-log-name',
 MASTER_LOG_POS=log_post,
 MASTER_CONNECT_RETRY=30;
 
6.slave start 启动A
 show slave status\G
 show processlist;

[Mysql主从+半同步]
Master:
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
SET GLOBAL rpl_semi_sync_master_enabled=1;
SET GLOBAL rpl_semi_sync_master_timeout=1000; (1s, default 10s)
Slave:
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
SET GLOBAL rpl_semi_sync_slave_enabled=1;
复制心跳(用户检测复制是否中断)

1.在主从基础上进行修改配置文件(A为主 B为从)
 A:
 rpl_semi_sync_master_enabled=1
 rpl_semi_sync_master_timeout=1000
 
 B:
 rpl_semi_sync_slave_enabled=1
2.或者
 A:
 INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';  插件默认不安装,安装后下次启动自动加载
 SET GLOBAL rpl_semi_sync_master_enabled=1;
 SET GLOBAL rpl_semi_sync_master_timeout=1000;
 B:
 INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; 
 SET GLOBAL rpl_semi_sync_slave_enabled=1;
 STOP SLAVE IO_THREAD; START SLAVE IO_THREAD; 
3.查看主从服务器状态
 show status like "%rpl_semi%";
+--------------------------------------------+---------------+
| Variable_name                              | Value         |
+--------------------------------------------+---------------+
| Rpl_semi_sync_master_clients               | 1             |# 有多少个Semi-sync的备库
| Rpl_semi_sync_master_net_avg_wait_time     | 732           |# 事务提交后,等待备库响应的平均时间
| Rpl_semi_sync_master_net_wait_time         | 1042785285    |# 等待网络响应的总次数
| Rpl_semi_sync_master_net_waits             | 1423323       |# 总的网络等待时间
| Rpl_semi_sync_master_no_times              | 0             |# 一共有几次从Semi-sync跌回普通状态
| Rpl_semi_sync_master_no_tx                 | 0             |# 备库未及时响应的事务数
| Rpl_semi_sync_master_status                | ON            |# 主库上Semi-sync是否正常开启
| Rpl_semi_sync_master_timefunc_failures     | 0             |# 时间函数未正常工作的次数
| Rpl_semi_sync_master_tx_avg_wait_time      | 29059         |# 开启Semi-sync,事务返回需要等待的平均时间
| Rpl_semi_sync_master_tx_wait_time          | 8164966680929 |# 事务等待备库响应的总时间
| Rpl_semi_sync_master_tx_waits              | 280974820     |# 事务等待备库响应的总次数
| Rpl_semi_sync_master_wait_pos_backtraverse | 5499398       |# 改变当前等待最小二进制日志的次数
| Rpl_semi_sync_master_wait_sessions         | 230           |# 当前有几个线程在等备库响应
| Rpl_semi_sync_master_yes_tx                | 16801244      |# Semi-sync模式下,成功的事务数
+--------------------------------------------+---------------+
 

[Mysql互为主从+半同步]
1.在互为主从基础上进行修改配置文件(A为主 B为从)
 A:
 rpl_semi_sync_master_enabled=1
 rpl_semi_sync_slave_enabled=1
 rpl_semi_sync_master_timeout=1000
 
 B:
 rpl_semi_sync_slave_enabled=1
 rpl_semi_sync_master_enabled=1
 rpl_semi_sync_master_timeout=1000
2.或者
 A:
 INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; 
 INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
 SET GLOBAL rpl_semi_sync_master_enabled=1;
 SET GLOBAL rpl_semi_sync_slave_enabled=1;
 SET GLOBAL rpl_semi_sync_master_timeout=1000;
 STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;
 B:
 INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; 
 INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
 SET GLOBAL rpl_semi_sync_master_enabled=1;
 SET GLOBAL rpl_semi_sync_slave_enabled=1;
 SET GLOBAL rpl_semi_sync_master_timeout=1000;
 STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;
3.查看主从服务器状态
 show status like "%rpl_semi%";

 

你可能感兴趣的:(mysql,数据库,mysql5,半同步复制,互为主从)