当前位置:   article > 正文

Linux MySQL 集群搭建_1921680254登陆

1921680254登陆

MySQL 集群搭建

MySQL 主从复制的方式
MySQL5.6 开始主从复制有两种方式:基于日志(binlog)、基于 GTID(全局事务标示符)。 本教程主要讲基于日志(binlog)的复制。
MySQL 主从复制(也称 A/B 复制)的原理
(1) Master将数据改变记录到二进制日志(binary log)中,也就是配置文件log-bin指定的文件, 这些记录叫做二进制日志事件(binary log events);
(2) Slave 通过 I/O 线程读取 Master 中的 binary log events 并写入到它的中继日志(relay log); 

(3) Slave 重做中继日志中的事件,把中继日志中的事件信息一条一条的在本地执行一次,完 成数据在本地的存储,从而实现将改变反映到它自己的数据(数据重放)。

MySQL 集群搭建(2 node):

mysql-01服务器:192.168.10.253

mysql-02服务器:192.168.10.254

MySQL版本:mysql-5.6.22

 

1、上传MySQL包到两台服务器:

  1. #mysql-01服务器
  2. scp mysql-5.6.22.tar.gz root@192.168.10.253:
  3. #mysql-02服务器
  4. scp mysql-5.6.22.tar.gz root@192.168.10.254:

2、添加 集群服务IP域名映射:

  1. #编辑本地 hosts文件
  2. vi /etc/hosts
  3. ######## mysql ########
  4. 192.168.10.253 mysql-01
  5. 192.168.10.254 mysql-02


3、各节点间可基于密钥进行SSH通信,而无需密码

 

  1. #产生密钥
  2. ssh-keygen -t dsa -f ~/.ssh/id_dsa -N ""
  3. #拷贝受权密钥
  4. cp .ssh/id_dsa.pub .ssh/authorized_keys
  5. #拷贝密钥到 mysql-02虚拟机
  6. scp -r .ssh mysql-02:
  7. #查看ssh 是否免密码登陆
  8. ssh mysql-02 -- uname -n


4、关闭集群防火墙:

  1. #查看防火墙的状态
  2. service iptables status
  3. #关闭防火墙
  4. service iptables stop
  5. #查看防火墙是否开机启动
  6. chkconfig --list iptables
  7. #关闭开机启动防火墙
  8. chkconfig iptables off

 

5、关闭 selinux

 

  1. #修改selinux config 配置
  2. vi /etc/selinux/config
  3. #修改 SELINUX的值为:disabled
  4. SELINUX=disabled


6、安装MySQL 的依赖包:

  1. #安装MySql 依赖
  2. yum install cmake wget gcc-c++ gcc ncurses-devel perl -y

7、解压MySQL源码包:

  1. #把源码解压到 /usr/local/src
  2. tar -xvf mysql-5.6.22.tar.gz -C /usr/local/src/
  3. #进入 /usr/local/src
  4. cd /usr/local/src

8、安装编译MySQL源码:

  1. #进入 mysql源码目录:
  2. cd mysql-5.6.22/
  3. #创建mysql 的数据储存目录:
  4. mkdir -p /usr/local/mysql/data
  5. #cmake 编译 指定mysql 配置
  6. cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/etc -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
  7. #删除 CMakeCache.txt 文件
  8. rm -rf CMakeCache.txt
  9. #编译源码 (编译时间比较长)
  10. make
  11. #安装
  12. make install
-DCMAKE_INSTALL_PREFIX=dir_name设置mysql安装目录
-DMYSQL_UNIX_ADDR=file_name设置监听套接字路径,这必须是一个绝对路径名。默认为/tmp/mysql.sock
-DDEFAULT_CHARSET=charset_name设置服务器的字符集。
缺省情况下,MySQL使用latin1的(CP1252西欧)字符集。
cmake/character_sets.cmake文件包含允许的字符集名称列表。
-DDEFAULT_COLLATION=collation_name设置服务器的排序规则。
-DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1
存储引擎选项:
MyISAM,MERGE,MEMORY,和CSV引擎是默认编译到服务器中,并不需要明确地安装。
静态编译一个存储引擎到服务器,使用-DWITH_engine_STORAGE_ENGINE= 1
可用的存储引擎值有:
ARCHIVE, BLACKHOLE, EXAMPLE, FEDERATED, INNOBASE (InnoDB), 
PARTITION (partitioning support), 和PERFSCHEMA (Performance Schema)
-DMYSQL_DATADIR=dir_name设置mysql数据库文件目录
-DMYSQL_TCP_PORT=port_num设置mysql服务器监听端口,默认为3306
-DENABLE_DOWNLOADS=bool是否要下载可选的文件。例如,启用此选项(设置为1),cmake将下载谷歌所使用的测试套件运行单元测试。

9、创建mysql组 和 用户:

  1. #创建MySQL组
  2. groupadd mysql
  3. #创建用户
  4. useradd -r -g mysql mysql
  5. #给 /usr/local/mysql 文件夹授权给MySQL用户
  6. chown -R mysql:mysql /usr/local/mysql

10、初始化DB 数据库:

  1. #进入脚本目录
  2. cd /usr/local/mysql/
  3. #初始化 db
  4. ./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/

11、配置MySQL环境变量:

  1. vi /etc/profile
  2. #mysql environment
  3. MYSQL_HOME=/usr/local/mysql
  4. PATH=.:$MYSQL_HOME/bin:$PATH
  5. export MYSQL_HOME PATH
  6. #重新加载 /etc/profile
  7. source /etc/profile
  8. #查看 MySQL 是否生效
  9. echo $PATH

 

配置MySQL HA

 

12、修改MySQL配置 /etc/my.cof

  1. #修改 /etc/my.cof
  2. vi /etc/my.cnf
  3. ##### mysql ha #####
  4. server_id=192.168.10.253
  5. binlog-ignore-db=mysql
  6. log-bin=mysql-master-bin
  7. binlog_cache_size=1M
  8. binlog_format=mixed
  9. expire_logs_days=7
  10. slave_skip_errors=1062

  1. ## 在 [mysqld] 中增加以下配置项
  2. ## 设置 server_id,一般设置为 IP server_id=192.168.10.253
  3. ## 复制过滤:需要备份的数据库,输出 binlog
  4. #binlog-do-db=roncoo
  5. ## 复制过滤:不需要备份的数据库,不输出(mysql 库一般不同步) binlog-ignore-db=mysql
  6. ## 开启二进制日志功能,可以随便取,最好有含义
  7. log-bin=edu-mysql-bin
  8. ## 为每个 session 分配的内存,在事务过程中用来存储二进制日志的缓存 binlog_cache_size=1M
  9. ## 主从复制的格式(mixed,statement,row,默认格式是 statement)
  10. binlog_format=mixed
  11. ## 二进制日志自动删除/过期的天数。默认值为 0,表示不自动删除。 expire_logs_days=7
  12. ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免 slave 端复制中断。 ## 如:1062 错误是指一些主键重复,1032 错误是因为主从数据库数据不一致 slave_skip_errors=1062

13、授权两个文件:当前用户是Mysql,对日志文件 和 socket文件没有写权限:

  1. #日志文件 授权 mysql 用户
  2. chown -R mysql:mysql /var/run/mysqld/
  3. #socket文件 授权 mysql 用户
  4. chown -R mysql:mysql /var/lib/mysql/

14、启动MySQL:

  1. #启动MySQL
  2. mysqld_safe &

15、查看MySQL进程:

  1. #查看进程:
  2. ps -ef | grep mysql

16、登陆MySQL数据库:

  1. #登陆MySQL
  2. mysql -uroot -p

注意:此时报错(如下图)
在/etc/mycof配置文件下 添加client配置:

 

  1. #编辑配置文件
  2. vi /etc/my.cof
  3. [client]
  4. port=3306
  5. socket=/var/lib/mysql/mysql.sock

17、重新登陆MySQL数据库(登陆成功、查看databases 能看到如下几个库):

 

  1. #登陆MySQL
  2. mysql -uroot -p

18、创建数据同步用户,并授予相应的权限:

  1. #创建数据同步用户,并授予相应的权限
  2. grant replication slave, replication client on *.* to 'mysql'@'192.168.0.254' identified by '123456';
  3. # 刷新授权表信息
  4. flush privileges;
  5. # 查看 position 号,记下 position 号(从机上需要用到这个 position 号和现在的日志文件)
  6. show master status;
  7. #创建 roncoo 库
  8. create database if not exists roncoo default charset utf8 collate utf8_general_ci;
  9. #创建 roncoo 表
  10. CREATE TABLE `user` (
  11. `Id` int(11) NOT NULL AUTO_INCREMENT,
  12. `userName` varchar(255) NOT NULL DEFAULT '' COMMENT '用户名',
  13. `pwd` varchar(255) NOT NULL DEFAULT '' COMMENT '密码',
  14. PRIMARY KEY (`Id`)
  15. ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='用户信息表';
  16. #插入3条数据,用于模拟现有的业务系统数据库
  17. INSERT INTO `user` VALUES (1,'小沈哥','123456'),(2,'张俊伟','123456'),(3,'XSG','123456');

 

配置MySQL slave

 

19、配置slave。编辑 /etc/my.cof

  1. vi /etc/my.cnf
  2. #### mysql ha ####
  3. server_id=1921680254
  4. binlog-ignore-db=mysql
  5. log-bin=mysql-slave-bin
  6. binlog_cache_size=1M
  7. binlog_format=mixed
  8. expire_logs_days=7
  9. slave_skip_errors=1062
  10. relay_log=mysql-slave-relay-bin
  11. log_slave_updates=1
  12. read_only=1

  1. ## 在 [mysqld] 中增加以下配置项
  2. ## 设置 server_id,一般设置为 IP
  3. server_id=206
  4. ## 复制过滤:需要备份的数据库,输出 binlog
  5. #binlog-do-db=roncoo
  6. ##复制过滤:不需要备份的数据库,不输出(mysql 库一般不同步) binlog-ignore-db=mysql
  7. ## 开启二进制日志,以备 Slave 作为其它 Slave 的 Master 时使用 log-bin=edu-mysql-slave1-bin
  8. ## 为每个 session 分配的内存,在事务过程中用来存储二进制日志的缓存 binlog_cache_size = 1M
  9. ## 主从复制的格式(mixed,statement,row,默认格式是 statement) binlog_format=mixed
  10. ## 二进制日志自动删除/过期的天数。默认值为 0,表示不自动删除。 expire_logs_days=7
  11. ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免 slave 端复制中断。 ## 如:1062 错误是指一些主键重复,1032 错误是因为主从数据库数据不一致 slave_skip_errors=1062
  12. ## relay_log 配置中继日志
  13. relay_log=edu-mysql-relay-bin
  14. ## log_slave_updates 表示 slave 将复制事件写进自己的二进制日志 log_slave_updates=1
  15. ## 防止改变数据(除了特殊的线程) read_only=1

20、Slave 上创建相同库:

  1. Slave 上创建相同库:
  2. create database if not exists roncoo default charset utf8 collate utf8_general_ci; use roncoo;

21、登录 Slave 数据库,添加相关参数

  1. #登录 Slave 数据库
  2. mysql -uroot -p
  3. #添加相关参数
  4. change master to master_host='192.168.0.253', master_user='mysql', master_password='123456', master_port=3306, master_log_file='mysql-master-bin.000001', master_log_pos=0, master_connect_retry=30;

 

22、查看主从同步状态

 

  1. # 查看主从同步状态
  2. # 可看到 Slave_IO_State 为空, Slave_IO_Running 和 Slave_SQL_Running 是 No,表明 Slave 还 没有开始复制过程。
  3. show slave status\G;

 

23、开启主从同步

 

  1. # 开启主从同步
  2. start slave

 

24、再查看主从同步状态

 

主要看以下两个参数,这两个参数如果是 Yes 就表示主从同步正常

Slave_IO_Running: Yes

Slave_SQL_Running: Yes 

  1. # 再查看主从同步状态
  2. show slave status\G

 

25、在 master 上,可以看到 slave 的 I/O 线程创建的连接

 

  1. # 再查看master 状态
  2. show processlist\G

 

26、#查看 slave 和 master 上线程的状态。在 slave 上,可以看到 master 的 I/O 线程创建的连接

 

 

  1. # 再查看 slave 状态
  2. show processlist\G

 

27、主从数据复制同步测试

 

  1. # 在master 服务器上添加数据
  2. INSERT INTO `user` VALUES (4,'张俊伟2B','123456'),(5,'张俊伟2BB 2','123456');

 

28、在slave 上查看数据

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/1006041
推荐阅读
相关标签
  

闽ICP备14008679号