您的位置:首页 > 数据库 > MySQL

mysql通过gitd方式实现多线程主从复制

2015-10-28 17:14 786 查看
MySQL 5.6之前的版本,同步复制是单线程的,队列的,只能一个一个执行,在5.6里,可以做到多个库之间的多线程复制,例如数据库里,存放着用户表,商品表,价格表,订单表,那么将每个业务表单独放在一个库里,这时就可以做到多线程复制,但一个库里的表,多线程复制是无效的。注,每个数据库仅能使用一个线程,复制涉及到多个数据库时多线程复制才有意义。.环境准备操作系统· CentOS 6.4 x86_64· 软件版本· Mysql 5.6.13·

1.实验拓扑



2修改主机名

[root@master ~]# uname -nmaster.test.com[root@slave ~]# uname -nSlave.test.com

3.配置名称解析

[root@master ~]# cat /etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhost.localdomain localhost6 localhost6.localdomain6192.168.18.201 master.test.com master192.168.18.202 slave.test.com slave[root@slave ~]# cat /etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhost.localdomain localhost6 localhost6.localdomain610.10.10.82 master.test.com master10.10.10.89 slave.test.com slave

4.配置时间同步

[root@master ~]# ntpdate time.nist.gov[root@slave ~]# ntpdate time.nist.gov

5关闭防火墙与SELinux

[root@master ~]# service iptables stop[root@master ~]# chkconfig iptables off[root@master ~]# getenforceDisabled[root@slave ~]# service iptables stop[root@slave ~]# chkconfig iptables off[root@slave ~]# getenforceDisabled

6.安装并配置mysql

master:(1).安装并链接mysql[root@master ~]# clear[root@master ~]# cd src/[root@master src]# lsmysql-5.6.13-linux-glibc2.5-x86_64.tar.gz[root@master src]# tar xf mysql-5.6.13-linux-glibc2.5-x86_64.tar.gz -C /usr/local/[root@master src]# cd /usr/local/[root@master local]# ln -sv /usr/local/mysql-5.6.13-linux-glibc2.5-x86_64 mysql"mysql" -> "/usr/local/mysql-5.6.13-linux-glibc2.5-x86_64" (2).新建mysql用户[root@master mysql]# groupadd -g 3306 mysql[root@master mysql]# useradd -u 3306 -g mysql -s /sbin/nologin -M mysql[root@master mysql]# id mysqluid=3306(mysql) gid=3306(mysql) 组=3306(mysql)(3).修改mysql安装目录所有者与所属组[root@master mysql]# chown -R root.mysql /usr/local/mysql/*(4).初始化mysql数据库先安装libaio库文件[root@master mysql]# yum install -y libaio创建数据存放目录[root@master mysql]# mkdir -pv /mydata/datamkdir: 已创建目录 "/mydata"mkdir: 已创建目录 "/mydata/data"修改目录所有者与所属组[root@master mysql]# chown -R mysql.mysql /mydata/data/[root@master mysql]# cd /mydata/data/初始化mysql[root@master data]# /usr/local/mysql/scripts/mysql_install_db --datadir=/mydata/data/ --basedir=/usr/local/mysql --user=mysql(5).简单修改配置文件注,mysql5.6以后,初始化完成后会在安装目录自动生成my.cnf的配置文件,直接修改即可。 [root@master mysql]# vim my.cnf#增加下面四行datadir = /mydata/datalog-bin=master-binlog-bin-index=master-bin.indexinnodb_file_per_table = 1(6).为mysql提供启动脚本[root@master mysql]# cp support-files/mysql.server /etc/init.d/mysqld[root@master mysql]# chmod +x /etc/init.d/mysqld(7).启动并测试[root@master mysql]# service mysqld startStarting MySQL SUCCESS![root@master mysql]# netstat -tulnpProto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 :::3306 :::* LISTEN 7680/mysqld 环境变量配置[root@master data]# vim /etc/profile.d/mysql.shexportPATH=$PATH:/usr/local/mysql/bin[root@master data]# source /etc/profile测试一下[root@master mysql]# mysql -h 127.0.0.1Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 1Server version: 5.6.13-log MySQL Community Server (GPL)Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || test |+--------------------+4 rows in set (0.11 sec)slave:(1).安装并链接mysql[root@slave ~]# tar xf mysql-5.6.13-linux-glibc2.5-x86_64.tar.gz -C /usr/local/[root@slave ~]# cd /usr/local/[root@slave local]# ln -sv /usr/local/mysql-5.6.13-linux-glibc2.5-x86_64 mysql"mysql" -> "/usr/local/mysql-5.6.13-linux-glibc2.5-x86_64" (2).新建mysql用户[root@slave mysql]# groupadd -g 3306 mysql[root@slave mysql]# useradd -u 3306 -g mysql -s /sbin/nologin -M mysql[root@slave mysql]# id mysqluid=3306(mysql) gid=3306(mysql) 组=3306(mysql)(3).修改mysql安装目录所有者与所属组[root@slave mysql]# chown -R root.mysql /usr/local/mysql/*(4).初始化mysql数据库安装libaio库文件[root@slave mysql]# yum install -y libaio创建数据存放目录[root@slave mysql]# mkdir -pv /mydata/datamkdir: 已创建目录 "/mydata"mkdir: 已创建目录 "/mydata/data"修改目录所有者与所属组[root@slave mysql]# chown -R mysql.mysql /mydata/data/[root@slave mysql]# cd /mydata/data/初始化mysql[root@master data]# /usr/local/mysql/scripts/mysql_install_db --datadir=/mydata/data/ --basedir=/usr/local/mysql --user=mysql(5).简单修改配置文件[root@slave data]# cd /usr/local/mysql[root@slave mysql]# vim my.cnfdatadir = /mydata/datalog-bin=master-binlog-bin-index=master-bin.indexinnodb_file_per_table = 1(6).为mysql提供启动脚本[root@slave mysql]# cp support-files/mysql.server /etc/init.d/mysqld[root@slave mysql]# chmod +x /etc/init.d/mysqld (7).启动并测试环境变量配置[root@slave data]# vim /etc/profile.d/mysql.shexportPATH=$PATH:/usr/local/mysql/bin[root@slave data]# source /etc/profile 测试登录一下[root@slave mysql]# mysql -h 127.0.0.1Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 1Server version: 5.6.13-log MySQL Community Server (GPL)Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || performance_schema || test |+--------------------+4 rows in set (0.12 sec) 8.配置mysql主从复制(1).配置选项说明要在MySQL 5.6中使用复制功能,其服务配置段[mysqld]中于少应该定义如下选项,binlog-format:二进制日志的格式,有row、statement和mixed几种类型;需要注意的是:当设置隔离级别为READ-COMMITED必须设置二进制日志格式为ROW,现在MySQL官方认为STATEMENT这个已经不再适合继续使用;但mixed类型在默认的事务隔离级别下,可能会导致主从数据不一致;log-slave-updates、gtid-mode、enforce-gtid-consistency、report-port和report-host:用于启动GTID及满足附属的其它需求;master-info-repository和relay-log-info-repository:启用此两项,可用于实现在崩溃时保证二进制及从服务器安全的功能;sync-master-info:启用之可确保无信息丢失;slave-paralles-workers:设定从服务器的SQL线程数;0表示关闭多线程复制功能;binlog-checksum、master-verify-checksum和slave-sql-verify-checksum:启用复制有关的所有校验功能;binlog-rows-query-log-events:启用之可用于在二进制日志记录事件相关的信息,可降低故障排除的复杂度;log-bin:启用二进制日志,这是保证复制功能的基本前提;server-id:同一个复制拓扑中的所有服务器的id号必须惟一。(2).配置主服务器master[root@master mysql]# vim my.cnf[mysqld]port = 3306datadir=/usr/local/mysql/datasocket = /var/lib/mysql/mysql.sock#skip-external-lockingkey_buffer_size = 256Mmax_allowed_packet = 1Mtable_open_cache = 256sort_buffer_size = 1Mread_buffer_size = 1Mread_rnd_buffer_size = 4Mmyisam_sort_buffer_size = 64Mthread_cache_size = 8query_cache_size= 16Mthread_concurrency = 2log-bin=mysql-bininnodb_file_per_table = 1 binlog-format=ROWlog-slave-updates=truegtid-mode=onenforce-gtid-consistency=truemaster-info-repository=TABLErelay-log-info-repository=TABLEsync-master-info=1slave-parallel-workers=2binlog-checksum=CRC32master-verify-checksum=1slave-sql-verify-checksum=1binlog-rows-query-log_events=1server-id = 10report-port=3306report-host=10.10.10.82(3).重新启动mysql[root@master mysql]# service mysqld restartShutting down MySQL.. SUCCESS!Starting MySQL...... SUCCESS!(4).查看gtid的相关信息[root@master mysql]# mysql -h127.0.0.1Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 1Server version: 5.6.13-log MySQL Community Server (GPL)Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> show global variables like '%gtid%';+--------------------------+-------+| Variable_name | Value |+--------------------------+-------+| enforce_gtid_consistency | ON || gtid_executed | || gtid_mode | ON | #说明gtid功能已启动| gtid_owned | || gtid_purged | |+--------------------------+-------+5 rows in set (0.10 sec)(5).创建有复制权限的用户mysql> GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'192.168.18.%' IDENTIFIED BY 'replpass';Query OK, 0 rows affected (0.44 sec)mysql> flush privileges;Query OK, 0 rows affected (0.03 sec)(6).配置从服务器slave[root@slave mysql]# vim my.cnf [mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M
thread_concurrency = 2
datadir=/usr/local/mysql/data
log-bin=mysql-bin
innodb_file_per_table = 1

binlog-format=ROW
log-slave-updates=true
gtid-mode=on
enforce-gtid-consistency=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-workers=2
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
server-id = 20
report-port=3306
report-host=10.10.10.89
(7).重新启动mysql[root@slave mysql]# service mysqld restartShutting down MySQL.. SUCCESS!Starting MySQL...... SUCCESS!(8).在从服务器上使用主mysql上创建的账号密码登录并进行复制mysql> change master to master_host='192.168.18.201', master_user='repluser',master_password='replpass',master_auto_position=1;Query OK, 0 rows affected, 2 warnings (0.24 sec)mysql> start slave;Query OK, 0 rows affected, 1 warning (0.04 sec)(9).查看一下复制状态mysql> show slave status\G*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.18.201 Master_User: repluser Master_Port: 3306 Connect_Retry: 60 Master_Log_File: master-bin.000001 Read_Master_Log_Pos: 151 Relay_Log_File: relay-log.000002 Relay_Log_Pos: 363 Relay_Master_Log_File: master-bin.000001Slave_IO_Running: Yes #IO线程与SQL线程都是yes,说明复制启动完成。Slave_SQL_Running: YesReplicate_Do_DB:Replicate_Ignore_DB: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: 151 Relay_Log_Space: 561 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: 1 Master_UUID: 6b27d8b7-0e14-11e3-9eab-000c291192e4 Master_Info_File: mysql.slave_master_info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update itMaster_Retry_Count: 86400Master_Bind:Last_IO_Error_Timestamp:Last_SQL_Error_Timestamp:Master_SSL_Crl:Master_SSL_Crlpath:Retrieved_Gtid_Set:Executed_Gtid_Set:Auto_Position: 11 row in set (0.00 sec)(10).测试一下主从复制master:mysql> create database mydb;Query OK, 1 row affected (0.05 sec)mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mydb || mysql || performance_schema || test |+--------------------+5 rows in set (0.00 sec)slave:mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mydb || mysql || performance_schema || test |+--------------------+5 rows in set (0.00 sec)(11).查看一下复制状态mysql> show slave status \G*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.18.201 Master_User: repluser Master_Port: 3306 Connect_Retry: 60 Master_Log_File: master-bin.000001 Read_Master_Log_Pos: 293 Relay_Log_File: relay-log.000002 Relay_Log_Pos: 505 Relay_Master_Log_File: master-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: 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: 293 Relay_Log_Space: 703 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: 1 Master_UUID: 6b27d8b7-0e14-11e3-9eab-000c291192e4 Master_Info_File: mysql.slave_master_info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: 6b27d8b7-0e14-11e3-9eab-000c291192e4:1 Executed_Gtid_Set: 3c8fa53-0e16-11e3-9eb8-000c29b8df6a:1-2, 6b27d8b7-0e14-11e3-9eab-000c291192e4:1 Auto_Position: 1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息