环境:1、(主) linux centOS 7 64位 2、(从) linux centOS 7 64位 3、(mysql)最好要求版本一致,从库不能比主库版本高 建议5.7

centos 7 默然安装mariadb,安装mysql 5.7参考如下链接文档: centos 7安装mysql 5.7 :https://juejin.im/post/5c088b066fb9a049d4419985 (转载) 一、主库配置 1、更改主库/etc/my.cnf 配置文件

vim /etc/my.cnf

[mysqld]

lower_case_table_names=1 max_connections=7000 group_concat_max_len = 202400 max_allowed_packet = 128M #开启gtid功能 gtid-mode=on
enforce-gtid-consistency=1 #设置server_id,一般设置为IP,注意要唯一 server_id=840 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步) replicate_wild_ignore_table=mysql.% #指定哪个数据库同步,本次只同步newerp库 replicate_wild_do_table=newerp.% #开启二进制日志功能,可以随便取,最好有含义关键就是这里了 log-bin=edu-mysql-bin 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存 binlog_cache_size=1M 主从复制的格式 mixed,statement,row,默认格式是statement binlog_format=mixed 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。 expire_logs_days=7 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 slave_skip_errors=1062 master_info_repository=TABLE relay_log_info_repository=TABLE

2、重启mysql数据库

systemctl restart mysqld

3、创建同步账户和查看master信息

[tomcat@iZ2zeij9pa0qnzjt5wcr4kZ ~]$ msyql -uroot -p Enter password: mysql>GRANT REPLICATION SLAVE ON . to ' slave_account '@'%' identified by '123456'; mysql>FLUSH PRIVILEGES; mysql> SHOW MASTER STATUS\G; *************************** 1. row *************************** File: edu-mysql-bin.000031 Position: 1210791 Binlog_Do_DB: newerp Binlog_Ignore_DB: mysql Executed_Gtid_Set: 2abeaffc-6158-11e7-8222-00163e03196b:1-16151 1 row in set (0.00 sec)

ERROR: No query specified

mysql>

注:'slave_account' 为主库创建同步用户,'123456'为数据库slave_account用户密码。 注:记录下File: edu-mysql-bin.000031和 Position: 1210791,后面从库会使用到。

4、mysqldump导出newerp库到从库

mysqldump -uroot -p123456 -hlocalhost --single-transaction --master-data=2 newerp > /data/newerp_back.sql

写了一个脚本供参考

  1. DB_USER="root"

  2. DB_PASS="123456!"

  3. DB_HOST="localhost"

  4. DB_NAME="newerp"

  5. BIN_DIR="/usr/bin"

  6. BCK_DIR="/data"

  7. DATE=date +%Y-%m-%d_%H-%M-%S

  8. $BIN_DIR/mysqldump -u$DB_USER -p$DB_PASS -h$DB_HOST --single-transaction --master-data=2 --routines --flush-logs $DB_NAME > $BCK_DIR/$DB_NAME.$DATE.sql

5、把备份文件scp传到从库

scp -P 22312 /data/newerp_back.sql root@从库IP:/root/ 密码:

主库配置完成,开始配置从库。

二、从库配置 1、从库 /etc/my.cnf 配置

[mysqld]

gtid-mode=on #开启gtid,5.6版本之后的功能

enforce-gtid-consistency=1

server_id=3026 #id必填项,不要与主库id相同

replicate-ignore-db=mysql #表示不同步mysql库,可以写多个

replicate-do-db=newerp #表示只同步newerp库,可以写多个

2、更改完重启mysqld服务

systemctl restart mysqld

3、导入newerp_back.sql数据

[root@localhost ~]# mysql -uroot -p < /root/newerp_back.sql

4、进入mysql

mysql> change master to master_host='10.175.18.40',master_user='slave_account',master_password='123456',master_log_file='edu-mysql-bin.000031',master_log_pos=1210791;

mysql> start slave; #开启同步 ,stop slave 停止同步,reset master 重置主库信息

mysql> `show slave status\G; ERROR 2006 (HY000): MySQL server has gone away No connection. Trying to reconnect... Connection id: 37 Current database: *** NONE ***

*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 10.175.18.40 Master_User: slave_account Master_Port: 3306 Connect_Retry: 60 Master_Log_File: edu-mysql-bin.000032 Read_Master_Log_Pos: 1031964 Relay_Log_File: localhost-relay-bin.000004 Relay_Log_Pos: 1032185 Relay_Master_Log_File: edu-mysql-bin.000032 Slave_IO_Running: Yes #两个都为YES表示成功开启同步 Slave_SQL_Running: Yes #两个都为YES表示成功开启同步 Replicate_Do_DB: newerp Replicate_Ignore_DB: mysql Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 1031964 Relay_Log_Space: 1032606 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 840 Master_UUID: 2abeaffc-6158-11e7-8222-00163e03196b Master_Info_File: /var/lib/mysql/master.info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: 2abeaffc-6158-11e7-8222-00163e03196b:10626-16016 Executed_Gtid_Set: 2abeaffc-6158-11e7-8222-00163e03196b:1-16016 Auto_Position: 0 Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: 1 row in set (0.00 sec)

ERROR: No query specified

mysql>

注:master_host='10.175.18.40'为主库IP,master_user='slave_account' 为主库创建同步用户,master_password='123456'为数据库slave_account用户密码,master_log_file='edu-mysql-bin.000031',master_log_pos=1210791;两项从主库获取。从主库执行sql命令:SHOW MASTER STATUS;

5、测试 在主库创建新表或插入新数据,看看从库是否同步。