运行了一段时间的数据库的主从复制记录一下步骤和说明。请注意,此同步不会使用GTID进行主从复制。配置中使用通配符仅同步具有特定名称的表。主从数据库版本:均为MySQL5.71。主库配置,打开bin-log,重启数据库先编辑主库的配置文件。我的数据库配置文件路径是:/etc/my.cnf。不要忘记先备份,以防配置出现问题。cp/etc/my.cnf/etc/my.cnf.bakvim/etc/my.cnf主要配置内容如下,我已经详细解释了:server-id=234#唯一的master-slave集群,不要再说一遍,我用的是ip地址后面的4位binlog-do-db=master_slave_test#需要同步的数据库binlog-ignore-db=mysql#不需要打开bin-log的数据库log_bin=mysql-bin#enablebin-logmaster_info_repository=TABLE#在从库中创建表并记录master的状态relay_log_info_repository=TABLE#在从库中创建表并记录同步的位置信息relay_log_recovery=ON#意外重启从库,并且可以立即恢复到未执行的sql语句的位置重启主数据库systemctlrestartmysqld2。从库配置,指定要同步的数据库,重启数据库server-id=167slave-skip-errors=all#跳过主从同步遇到的所有错误号,继续执行下面的sqlreplicate_do_db=master_slave_test#需要的复制数据库replicate_wild_do_table=master_slave_test.%table%#数据库中需要复制的表,使用通配符匹配包含'table'这个词的表slave-parallel-type=LOGICAL_CLOCK#并行复制slave-parallel-workers=4#slave个数threadsmaster_info_repository=TABLE#从库建表,记录master的状态relay_log_info_repository=TABLE#从库建表,记录同步的位置信息relay_log_recovery=ON#意外关机重启,并且可以立即恢复到未执行的sql语句的位置重启从库systemctlrestartmysqld3。从主库导出数据在主库中,在没有开启bin-log之前,使用mysqldump工具导出并压缩数据。mysqldump-uroot-P3317-p--single-transaction--master-data=2--databases数据库1--tablestable表名1table表名2>master_slave_test.sqlgzipmaster_slave_test.sqlwhere:--single-transaction:表不加锁,保证dump数据的一致性。--master-data:当指定=1时,ACHANGEMASTERTOMASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=1565461;将添加到导出的sql文件中,从库中导入时将执行该sql。我们在从库启动主从的时候,需要手动写一个详细的变更语句,所以我们不想执行从库的sql语句,而是需要获取bin-log的位置信息,所以指定=2,即在导出的sql文件中将其注释掉。当数据量很大时,可以使用nohup工具在后台执行mysqldump。具体操作如下:nohupmysqldump-uroot-P3317-p--single-transaction--master-data=2--databases数据库1--tables表表名1表表名2>master_slave_test.sql(回车输入数据库密码)ctrl+z打断输入bg命令后台运行4、从数据库导入数据,登录从库所在服务器,复制.sql文件,解压.scp-P22-l10000zhengyuchuan@10.10.8.103:/data/backup/master_slave_test.sql.gz.gzip-dmaster_slave_test.sql.gz其中:-P:指定ssh登录的端口-l:限制scp带宽以免影响其他业务。这里的限制是1M左右。解压完成后,从库中导入数据。在导入数据之前,先从库创建master_slave_test数据库。创建数据库master_slave_test字符集=utf8mb4;退出;然后导入数据。mysql-P3317-uroot-pmaster_slave_test
