一、框架搭建
1.首先备份主库数据,有两种方法,冷备份和热备份。冷备份需要先停止master服务,sudo/etc/init.d/mysql stop,然后通过cp或者scp等命令将数据文件传输到指定文件夹,这里我选择在一台服务器上启动三个实例来搭建组复制,所以就用sudo cp -R /var/lib/mysql /home/piriineos/data/mysql/data1/来复制数据,需要注意的是,这里用root权限复制数据所以在目标地点的数据所有者是root,对mysql需要将数据文件改为mysql所有,sudo chown -R mysql /home/piriineos/data/mysql ,复制成功后还需要注意一点就是auto.cnf文件,用来保存根据sererid生成的server uuid,对组复制有用,用来唯一标识mysql实例,这里由于复制的master的文件,所以将uuid随便改几个数字以区别开来。
热备份不需要停止服务,这在生产环境是必须的条件。这里我用mysqldump来转储数据,mysqldump对innodb表来说不影响服务,但是对于myisam表会用FTWRL来锁住所有表,导致服务停止。这里我就不备份系统表了,mysqldump --databases mgr--single-transaction --master-data=2 -uroot -p -h127.0.0.1>/home/piriineos/data/msater_backup.sql 。 然后在初始化一个新的数据库,mysql_install_db --basedir=/var/lib/mysql--datadir=/home/piriineos/data/mysql/data1/ --user=mysql,然后启动实例用source或者通道将备份的库导入到新实例的库中,不过在此之前需要将新的两个数据库配置一下配置文件。
2.8.0的真正的配置文件并不是存储在/etc/mysql/my.cnf,可以将其打开发现!includedir /etc/mysql/mysql.conf.d/这么一句话,这是将这个文件里的内容include到my.cnf里,因而我将真正的配置文件复制两份到新的数据库那里,sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf/home/piriineos/data/mysql/data1/ ,同样需要更改所有者,然后配置参数。
首先是实例启动参数的配置:
port = 3307
pid-file =/tmp/mysql1.pid
socket =/tmp/mysql1.sock
datadir =/home/piriineos/data/mysql/data1/mysql
log-error =/home/piriineos/data/mysql/error1.log
server-id = 13307 #这个必须设置,不然会使用默认值
然后是mysql运行参数的设置:
innodb_buffer_pool_size = 1073741824 #我的机器总内存8G,系统运行占用3G,因而每个实例分配1G内存
innodb_buffer_pool_instances = 1
innodb_flush_log_at_trx_commit = 1
sync_binlog = 1 #跟上一个参数配合使用,在每次事务的提交阶段分别前后写入硬盘
binlog_checksum = NONE #组复制必须关闭
open_files_limit = 65535
thread_cache_size = 8
transaction_isolation =READ-COMMITTED
然后是日志和gtid的参数设置:
log_bin = mysql-bin #避免使用默认服务器名
binlog_format = row #组复制必须
slow_query_log = 1
slow_query_log_file =/home/piriineos/data/mysql/data1/mysql/mysql-slow.log
skip-slave-start = 1
log-slave-updates = 1 #必须
gtid-mode = ON #必须
enforce-gtid-consistency = ON #必须
binlog_gtid_simple_recovery=1 #在5.7.17后建议开启,加快恢复速度
master_info_repository=TABLE #必须
relay_log_info_repository=TABLE #必须
sync_relay_log = 1
sync_master_info = 100
sync_relay_log_info = 100
relay-log-index = relay-log.index
relay-log = relay-log
然后是组复制参数设置:
transaction_write_set_extraction =XXHASH64 #唯一确定事务影响行的主键,必须开启
loose-group_replication_group_name ='aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa' #唯一标识一个组
loose-group_replication_ip_whitelist ='127.0.0.1/8' #允许接入组的ip来源
loose-group_replication_local_address ='127.0.0.1:33062' #用于组间通信的地址
loose-group_replication_group_seeds ='127.0.0.1:33061,127.0.0.1:33062,127.0.0.1:33063' #donor地址
loose-group_replication_bootstrap_group =OFF #引导节点设置
loose-group_replication_single_primary_mode= true #单主模式
loose-group_replication_enforce_update_everywhere_checks= false
loose-group_replication_start_on_boot =false #避免重启自动自动组复制