基于MYSQL 5.6.28 编译安装的主从复制实验

回复 收藏
基于MYSQL 5.6.28 编译安装的主从复制实验主服务器:
hostname chiang131
ip  172.16.20.131   255.255.255.0   172.16.20.1
从服务器
hostname  jiankong248
ip  172.16.3.248   255.255.255.0   172.16.3.1

首先确认两台机器能互相访问ping通,防火墙先清空规则
[root@chiang131 src]# ip addr |grep eth0 && iptables -F && service iptables save && ping 172.16.3.248
4: eth0:  mtu 1500 qdisc mq state UP qlen 1000
    inet 172.16.20.131/24 brd 172.16.20.255 scope global eth0
iptables:将防火墙规则保存到 /etc/sysconfig/iptables:     [确定]
PING 172.16.3.248 (172.16.3.248) 56(84) bytes of data.
64 bytes from 172.16.3.248: icmp_seq=1 ttl=63 time=0.304 ms
64 bytes from 172.16.3.248: icmp_seq=2 ttl=63 time=0.417 ms
^C
--- 172.16.3.248 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1088ms
rtt min/avg/max/mdev = 0.304/0.360/0.417/0.059 ms


[root@jiangkong3248 src]# ip addr |grep eth0 && iptables -F && service iptables save && ping 172.16.20.131
2: eth0:  mtu 1500 qdisc mq state UP qlen 1000
    inet 172.16.3.248/24 brd 172.16.3.255 scope global eth0
iptables: Saving firewall rules to /etc/sysconfig/iptables: [  OK  ]
PING 172.16.20.131 (172.16.20.131) 56(84) bytes of data.
64 bytes from 172.16.20.131: icmp_seq=1 ttl=63 time=0.387 ms
64 bytes from 172.16.20.131: icmp_seq=2 ttl=63 time=0.419 ms
^C
--- 172.16.20.131 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1020ms
rtt min/avg/max/mdev = 0.387/0.403/0.419/0.016 ms

然后两台主机各自解压mysql,
[root@jiangkong3248 src]# tar xf mysql-5.6.28.tar.gz
[root@jiangkong3248 src]# ls
mysql-5.6.28  mysql-5.6.28.tar.gz

[root@chiang131 src]# tar xf mysql-5.6.28.tar.gz
[root@chiang131 src]# ls
mysql-5.6.28  mysql-5.6.28.tar.gz以chiang131为示例进行编译安装
[root@chiang131 src]# useradd mysql -s /sbin/nologin -M     ##创建一个mysql的系统账号,此账号不能用于登陆系统,不创建账号的家目录,只用于运行mysql服务
[root@chiang131 src]# mkdir /usr/local/mysql      ##创建mysql基本安装路径目录
[root@chiang131 src]# mkdir -p /data/mysql        ##创建mysql数据存放路径目录[root@chiang131 src]# mkdir -p /data/etc        ##创建mysql配置文件存放路径目录
[root@chiang131 src]# chown -R mysql:mysql /data/mysql/  /data/etc      ##更改数据存放目录和配置文件目录的mysql账号读写权限

[root@chiang131 src]#yum install -y gcc make cmake ncurses-devel libxml2-devel libtool-ltdl-devel gcc-c++ autoconf automake bison zlib-devel    ##安装编译mysql5.6.28需要的依赖包[root@chiang131 mysql]# cp -r /usr/local/src/mysql-5.6.28/* /usr/local/mysql/     ##复制安装文件到安装目录里
[root@chiang131 mysql]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql/ -DMYSQL_DATADIR=/data/mysql -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DMYSQL_USER=mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_INNOBASE_STORAGE_ENGINE=1 -DENABLE_DOWNLOADS=1 -DMYSQL_TCP_PORT=3306 -DSYSCONFDIR=/data/etc/
参数说明
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql 设置安装目录
-DMYSQL_DATADIR=/data/mysql 设置数据库存放目录
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock 设置UNIX socket 目录
-DMYSQL_USER=mysql 设置运行用户
-DDEFAULT_CHARSET=utf8 设置默认字符集,默认latin1
-DDEFAULT_COLLATION=utf8_general_ci 设置默认校对规则,默认latin1_general_ci
-DWITH_INNOBASE_STORAGE_ENGINE=1 添加InnoDB引擎支持
-DENABLE_DOWNLOADS=1 自动下载可选文件,比如自动下载谷歌的测试包
-DMYSQL_TCP_PORT=3306 设置服务器监听端口,默认3306
-DSYSCONFDIR=/data/etc 设置my.cnf所在目录,默认为安装目录
cmake编译过程中可能会遇到某个依赖包没有安装导致中止的错误,解决方法先按给出的错误提示安装好相应的依赖包,然后删除掉CMakeCache.txt文件再重新执行cmake命令指定编译参数编译
[root@chiang131 mysql]# make && make install    ##开始执行make编译和安装,过程时间比较久一点
[root@chiang131 mysql]# chmod +x /usr/local/mysql/scripts/mysql_install_db    ##给初始化库文件赋予执行权限
[root@chiang131 mysql]# /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/   ##初始化数据库
[root@chiang131 mysql]# cp -v /usr/local/mysql/support-files/my-default.cnf /data/etc/my.cnf   ##复制配置文件模板到配置文件目录
[root@chiang131 mysql]#vim /data/etc/my.cnf     ##修改配置文件,更改以下配置
basedir = /usr/local/mysql
datadir = /data/mysql
port = 3306
socket = /tmp/mysql.sock


[root@chiang131 etc]# echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile    ##将mysql命令配置为环境变量[root@chiang131 etc]# source /etc/profile
[root@chiang131 mysql]# cp -v /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld    ##复制mysql自带的启动脚本模板到系统服务启动文件路径
[root@chiang131 mysql]# chmod +x /etc/init.d/mysqld    ##赋予启动脚本文件可执行权限[root@chiang131 mysql]# chkconfig mysqld --add
[root@chiang131 mysql]# chkconfig mysqld on       ##将mysqld配置为系统服务并开机自启动服务
[root@chiang131 mysql]# service mysqld start      
Starting MySQL. SUCCESS!

mysql已经成功启动
从服务器也按照以上编译安装好mysql。

接下来就开始配置主从了
先随便创建一个chiang库和ourdata表,随意插入一些记录
[root@chiang131 etc]# mysql -uroot -e "create database chiang;use chiang;create table ourdata (name varchar(40),age int);insert into chiang.ourdata (name,age) values ('zhangming',33);select * from chiang.ourdata;"
+-----------+------+
| name      | age  |
+-----------+------+
| zhangming |   33 |
+-----------+------+
[root@chiang131 etc]# vim /data/etc/my.cnf     编辑配置文件,更改 以下配置,log_bin设置二进制日志文件的文件名前缀,server_id设置服务器编号,此编号不能与其他的服务器的编号一致,必须唯一
log_bin = chiang-bin
server_id = 131[root@chiang131 etc]# mysql -uroot -e "create user 'slave_cp'@'%' identified by '77778888';grant replication slave on *.* to 'slave_cp'@'%';"    ##在主服务器上创建一个拥有replication slave权限,用于复制数据的mysql登陆账户slave_cp
[root@chiang131 etc]# service mysqld restart  ##重启服务,重新加载配置

[root@jiangkong3248 mysql]# vim /data/etc/my.cnf    ##更改从服务器的mysql服务ID编码,不能和其他的mysql服务器的编码一致,必须唯一值
server_id = 248
[root@jiangkong3248 mysql]# service mysqld restart   ##重启服务,重新加载配置

[root@chiang131 etc]# mysql -uroot -e "flush tables with read lock;show master status;"   ##对数据库所有表进行只读锁定,查看到二进制日志信息,
file为二进制日志文件名,position为当前日志记录位置
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| chiang-bin.000001 |      419 |              |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+
[root@chiang131 etc]# mysqldump -uroot --databases chiang --lock-all-tables > /data/chiang.sql    ##将chiang这个库备份出来,备份时加上锁定参数,锁定所有数据表以保证数据的完整性
[root@chiang131 etc]# scp /data/chiang.sql 172.16.3.248:/data/      ##将chang.sql复制到从服务器上

[root@jiangkong3248 mysql]# mysql -uroot -e "create database chiang;"    ##在从服务器上创建chiang库
[root@jiangkong3248 mysql]# mysql -uroot < /data/chiang.sql    ##将chiang库的备份重新导入从服务器上
[root@jiangkong3248 mysql]# mysql -uroot -e "change master to master_host='172.16.20.131',master_user='slave_cp',master_password='77778888',master_log_file='chiang-bin.000001',master_log_pos=494;start slave;show slave status\G;"                ##配置从服务器与主服务器的连接参数,master_host指定主服务器的ip,master_user指定主服务器上创建的拥有复制权限账号,master_password指定账户密码,master_log_file指定主服务器上的二进制日志文件,,master_log_pos指定主服务器二进制日志文件当前记录的位置,start slave开启从服务器的主从复制功能,show slave status查看从服务器状态
[root@jiangkong3248 mysql]# mysql -uroot -e "select * from chiang.ourdata;"    ##在从服务器上查看到chiang库的记录与主服务器上的一样
+-----------+------+
| name      | age  |
+-----------+------+
| zhangming |   33 |
+-----------+------+


[root@chiang131 etc]# mysql -uroot -e "insert into chiang.ourdata (name,age) values ('hanbing',25);select * from chiang.ourdata;"     ## 在主服务器上往chiang库的ourdata表再插入一条记录
+-----------+------+
| name      | age  |
+-----------+------+
| zhangming |   33 |
| hanbing   |   25 |
+-----------+------+

[root@jiangkong3248 mysql]# mysql -uroot -e "select * from chiang.ourdata;"
+-----------+------+
| name      | age  |
+-----------+------+
| zhangming |   33 |
| hanbing   |   25 |
+-----------+------+

可以看到从服务器上已经可以正常对主服务器的chiang库复制了,到此实验完成
2016-01-30 01:27 举报
已邀请:
0

沧海一叶

赞同来自:

学习

回复帖子,请先登录注册

退出全屏模式 全屏模式 回复
评分
可选评分理由: