2022年MySql数据库集群 .pdf
MySql 数据库集群1. 准备服务器由于 MySQL不同版本之间的(二进制日志 )binlog 格式可能会不一样,因此最好的搭配组合是Master 的 MySQL版本和 Slave的版本相同或者更低, Master 的版本肯定不能高于Slave版本。假设同步主机1 名为: 192.168.0.150 ,主机 2 名为: 192.168.0.142, 2 个 MySQL 的 basedir目录都是 /usr/share/mysql ,datadir 都是: /var/lib/mysql 。主机 1:操作系统: fc13.x86_64IP:192.168.0.150MySQL 版本: 5.1.52主机 2:操作系统: fc13.x86_64IP:192.168.0.142 MySQL 版本: 5.1.52 2. 安装 Mysql Yum install mysql3. 创建数据库分别登录主机1 和主机 2 的 mysql:mysql u root p创建数据库:create database repdatabase; #需要同步的数据库4. 设置同步服务器4.1 设置主机 1:192.168.0.150 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 8 页 - - - - - - - - - 4.1.1 配置 f 文件每个同步服务器都必须设定一个唯一的编号,否则同步就不能正常运行。接下来开始修改 /etc 目录下的f,在 mysqld配置段增加以下几行:server-id = 1 #唯一编号log-bin binlog-do-db= repdatabase #需要同步的数据库,如果没有本行,即表示同步所有的数据库binlog-ignore-db=mysql #被忽略的数据库master-host = 192.168.0.142 #主服务器名master-user = rep #同步账户名,默认是 test master-password = rep #同步帐户密码,默认是空master-port = 3306 #主服务器的 TCP/IP 端口号,默认是 3306 master-connect-retry=60 #为了使用事务的 InnoDB在复制中最大的持久性和一致性,应该指定innodb_flush_log_at_trx_commit=1,sync_binlog=1 选项:replicate-ignore-db=mysql replicate-do-db=repdatabase innodb_flush_log_at_trx_commit=1 sync_binlog=1 auto_increment_increment=2 #Controls the interval between successive column values auto_increment_offset=1 #Determines the starting point for the AUTO_INCREMENT column valueskip-name-resolve #Do not resolve host names when checking client connections. Use only IP addresses. If you use this option, all Hostcolumn values in the grant tables must be IP addresses or localhost. 4.1.2 创建一个有复制权限的用户在主机 1 上增加一个账号专门用于同步,如下:mysqlGRANT REPLICATION SLAVE ON *.* TO rep192.168.0.142 IDENTIFIED BY rep; 如果想要在主机2 上有权限执行LOAD TABLE FROM MASTER 或LOAD DATA FROM 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 8 页 - - - - - - - - - MASTER 语句的话,必须授予全局的FILE 和 SELECT 权限:mysqlGRANT FILE,SELECT,REPLICATION SLAVE ON *.* TO rep192.168.0.142 IDENTIFIED BY rep; 4.1.3 重启 mysql服务service mysqld restart 4.1.4 锁住主机,注意二进制日志的位置并备份主机数据库a)用 show master status 命令看日志情况mysql show master status; +-+-+-+-+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +-+-+-+-+ | mysqld-bin.000001 | 106 | repdatabase | mysql | +-+-+-+-+ 1 row in set (0.00 sec) b)备份主机 1 上的数据,首先执行如下SQL语句:mysqlFLUSH TABLES WITH READ LOCK; 不要退出这个终端,否则这个锁就不生效了;接着导出数据: billyblack $ mysqldump -u root repdatabase /home/billy/mysql/master/repdatabase.sql 用以下命令在主机上重新打开写操作功能:mysql UNLOCK TABLES;4.2 设置主机 2:192.168.0.142 4.2.1 配置 f 文件在mysqld配置段增加如下几行:server-id = 2 #唯一编号log-bin 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 8 页 - - - - - - - - - binlog-do-db= repdatabase #需要同步的数据库,如果没有本行,即表示同步所有的数据库binlog-ignore-db=mysql #被忽略的数据库master-host = 192.168.0.150 #主服务器名master-user = rep #同步账户名,默认是 test master-password = rep #同步帐户密码,默认是空master-port = 3306 #主服务器的 TCP/IP 端口号,默认是 3306 master-connect-retry=60 replicate-ignore-db=mysql replicate-do-db=repdatabase #为了使用事务的 InnoDB在复制中最大的持久性和一致性,应该指定innodb_flush_log_at_trx_commit=1,sync_binlog=1 选项:innodb_flush_log_at_trx_commit=1 sync_binlog=1 auto_increment_increment=2 #Controls the interval between successive column values auto_increment_offset=2 #Determines the starting point for the AUTO_INCREMENT column value skip-name-resolve #Do not resolve host names when checking client connections. Use only IP addresses. If you use this option, all Hostcolumn values in the grant tables must be IP addresses or localhost. 4.2.2 创建一个有复制权限的用户在主机 2 上增加一个账号专门用于同步,如下:mysqlGRANT REPLICATION SLAVE ON *.* TO rep192.168.0.150 IDENTIFIED BY rep; 如果想要在主机2 上有权限执行LOAD TABLE FROM MASTER 或LOAD DATA FROM MASTER 语句的话,必须授予全局的FILE 和 SELECT 权限:mysqlGRANT FILE,SELECT,REPLICATION SLAVE ON *.* TO rep192.168.0.150 IDENTIFIED BY rep; 4.2.3 在主机 2 上加载 Dump(转存)文件billyblue $ mysql -u root repdatabase start slave; 若提示:ERROR 1200 (HY000): The server is not configured as slave; fix in config file or with CHANGE MASTER TO 则执行以下操作:先在 master 主机执行show master status:mysql show master status; +-+-+-+-+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +-+-+-+-+ | mysqld-bin.000001 | 106 | repdatabase | mysql | +-+-+-+-+ 1 row in set (0.00 sec) 然后在主机2 执行:mysql stop slave; Query OK, 0 rows affected (0.00 sec) mysql change master to master_host=192.168.0.150, master_user=rep, master_password=rep,master_log_file=mysqld-bin.000001, master_log_pos=106; Query OK, 0 rows affected (0.09 sec) mysql start slave; Query OK, 0 rows affected (0.00 sec) 这些参数代表:MASTER_HOST: 主机的 IP或者名称MASTER_USER: 这是我们在前面步骤中授予REPLICATION SLAVE 权限的用户,在这个例子中就是“rep”名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 8 页 - - - - - - - - - MASTER_PASSWORD: 这是我们在前面步骤中分配给“rep”的密码MASTER_LOG_FILE: 这是我们在前面步骤中确定的文件名(File)MASTER_LOG_POS: 这是我们在前面步骤中确定的位置(Position)b)启动主机 1 的 slave :mysqlstart slave; (细节参考上一条)c)启动成功后,分别登录两台主机,查看同步状态:mysql -hlocalhost -uroot mysqlSHOW SLAVE STATUSG * 1. row * Slave_IO_State: Waiting for master to send event Master_Host: rep1 Master_User: rep Master_Port: 3306 Connect_Retry: 60 Master_Log_File: binlog.000001 Read_Master_Log_Pos: 98 Relay_Log_File: relay.000003 Relay_Log_Pos: 232 Relay_Master_Log_File: binlog.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: 98 Relay_Log_Space: 232 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: 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 8 页 - - - - - - - - - Seconds_Behind_Master: 0 1 row in set (0.00 sec) 可以看到, Slave_IO_Running 和 Slave_SQL_Running 两列的值都为Yes,这表明Slave 的I/O 和 SQL 线程都在正常运行。至此,同步设定成功。5. 测试create table class(id int primary key not null,name varchar(12) not null);6. 基本命令Mysql -u username p password Show master status; Show slave status; SHOW PROCESSLIST mysql master 相关命令 : show master status show slave hosts show binlog events purge logs to log_namepurge logs before datereset master(老版本 flush master) set sql_log_bin= mysql slave 相关命令 : slave start slave stop SLAVE STOP IO_THREAD #此线程把 master 段的日志写到本地SLAVE start IO_THREAD SLAVE STOP SQL_THREAD #此线程把写到本地的日志应用于数据库SLAVE start SQL_THREAD reset slave SET GLOBAL SQL_SLAVE_SKIP_COUNTER load data from master show slave status(SUPER,REPLICATION CLIENT) CHANGE MASTER TO MASTER_HOST=, MASTER_PORT=,MASTER_USER=, MASTER_PASSWORD= #动态改变 master 信息名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 8 页 - - - - - - - - - PURGE MASTER before date # 删除 master 端已同步过的日志7. JDBC 连接Driver= com.mysql.jdbc.Driver URL=jdbc:mysql:/192.168.0.150:3306,192.168.0.142:3306/repdatabase Property: useConfigs=clusterBase 8. 参考文档wp_mysql-5_5_R.pdf 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 8 页 - - - - - - - - -