资讯专栏INFORMATION COLUMN

mysql集群的主从复制

IT那活儿 / 1102人阅读
mysql集群的主从复制

点击上方“IT那活儿”,关注后了解更多内容,不管IT什么活儿,干就完了!!!



mysql数据库安装


如果你的服务器使用rpm安装了mysql的话需要先卸载。
找度娘(linux 卸载mysql rpm)即可。
https://www.cnblogs.com/xiaxiaoxu/p/9979022.html
安装mysql:
介绍:glibc是mysql官方编译好了的安装包,直接安装就行。

1. 解压及创建目录

a)移动压缩包到/usr/local/目录下(很多公司将第三方软件安装在此目录下):
[root@node1 local]# mv /root/mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz /usr/local/
b)进入/usr/local/目录下解压缩:
[root@hadoop1 local]# tar -zxvf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
c)改名:
[root@hadoop1 local]# mv mysql-5.7.28-linux-glibc2.12-x86_64 mysql
d)进入mysql目录,再去创建3个目录:
[root@hadoop1 local]# cd mysql
[root@hadoop1 mysql]# mkdir arch tmp relay_log
备注:arch(记录的是binlog日志信息)tmp(临时目录) relay_log(用来做主从同步)。

2. 创建用户及用户组

1)创建用户组bda:
[root@hadoop1 local]# groupadd -g 101 dba
2)查看有没有创建此用户组,需要查看一个文件/etc/group,看一下有没有dba。
[root@hadoop1 mysql]# cat /etc/group | tail -n 3
postfix:x:89:
ntp:x:38:
dba:x:101:
3)创建mysql用户,指定用户组是bda,指定mysql用户的家目录是:
/usr/local/mysql/
[root@hadoop1 local]# useradd -g dba -d /usr/local/mysql/ mysql
备注:-g<群组>  指定用户所属的群组。-d<登入目录>  指定用户登入时的起始目录(用户的家目录)。
4)为了解决-bash-4.2$问题(原因就是因为mysql用户的家目录下没有以.bash开头的隐藏文件),需要注意的是,复制操作需要root用户执行。
[root@hadoop1 local]# cp /etc/skel/.bash_profile /usr/local/mysql/
[root@hadoop1 local]# cp /etc/skel/.bash_logout /usr/local/mysql/
[root@hadoop1 local]# cp /etc/skel/.bashrc /usr/local/mysql/

3. 配置mysql用户环境变量(注意使用root用户)

在.bash_profile 中末尾添加两行:
[mysql@hadoop1 ~]$ vi /usr/local/mysql/.bash_profile
#mysql
export MYSQL=/usr/local/mysql
export PATH=$PATH:$MYSQL/bin

4. 创建mysql的配置文件my.cnf(如果出现覆盖overwrite,输入y)

上传my.cnf
[root@hadoop1 ~]# mv my.cnf /etc/
5. 赋予权限
[root@hadoop1 ~]# chown mysql:dba /etc/my.cnf
[root@hadoop1 ~]# chmod 640 /etc/my.cnf
[root@hadoop1 ~]# chown -R mysql:dba /usr/local/mysql/
[root@hadoop1 ~]# chmod -R 755 /usr/local/mysql/

6. 配置开机自动启动

[root@hadoop1 ~]# cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysql
[root@hadoop1 ~]# chmod +x /etc/rc.d/init.d/mysql
[root@hadoop1 ~]# chkconfig --add mysql
[root@hadoop1 ~]# chkconfig mysql on

7. 安装libaio包

[root@hadoop1 ~]# yum -y install libaio

8. 初始化mysql

[root@hadoop1 ~]# su - mysql

# data是mysql数据库存放数据的目录
[mysql@hadoop1 ~]$ mkdir data
#初始化mysql
[mysql@hadoop1 mysql]$ bin/mysqld --defaults-file=/etc/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --initialize

9. 查看临时密码有没有生成

[mysql@hadoop1 data]$ cat /usr/local/mysql/data/hostname.err | grep password
备注:MySQl启动日志是hostname.err,初始化完如果发现没有临时密码,需要cat一下这个日志文件,看一下有没有ERRO,如果有erro重新初始化mysql。

10. 启动mysql服务

[mysql@hadoop1 data]$ /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &
[mysql@hadoop1 data]$ service mysql status
#也可以去看一下mysql的进程在不在
[mysql@hadoop1 data]$ ps -elf | grep mysql (会发现mysql进程正在启动)

11. 修改临时密码

需要进入mysql
mysql -uroot -p
mysql> alter user root@localhost identified by 123456;
mysql> grant all privileges on *.* to root@%  identified by 123456;
mysql> flush privileges;

12. 验证连接工具能够连接

重新初始化mysql数据库步骤:
1)[root@hadoop1 local]# su - mysql
2)[mysql@hadoop1 ~]$ rm -rf data arch tmp relay_log
3)[mysql@hadoop1 ~]$ mkdir data arch tmp relay_log
4)看一下有没有mysql进程正在运行。
[mysql@hadoop1 mysql]$ ps -elf | grep mysql
[mysql@hadoop1 mysql]$ kill -9 [PID]
5)再从第8步开始执行。
13. 有可能遇到的问题
1)mysql再次进进不去了?
  • 检查你的密码对不对;

  • 检查你的mysql有没有启动,需要重新启动,而且需要再添加开机自动启动。

[mysql@hadoop1 ~]$ service mysql status
SUCCESS! MySQL running (7661)
  • 如果是success没有问题。

[mysql@hadoop1 ~]$ ps -elf | grep mysql
  • 看一下有没有这个进程。

2)mysql命令没有找到。
问题:mysql:command not found。
解决:配置相关用户环境变量。



mysql数据备份


https://www.cnblogs.com/markLogZhu/p/11398028.html
写一个脚本一次性备份所有库下面的所有表。
1. 核心命令:
mysqldump -uroot -p123456 test user > user.sql
2. 需要拿到所有的数据库:
[mysql@hadoop1 mysql]$ mysql -uroot -p123456 -s -e "show databases;" | grep -v Database
mysql: [Warning] Using a password on the command line interface can be insecure.
information_schema
mysql
performance_schema
sys
test
test2
备注:
-s :将结果以文本的方式进行输出;
-e :可以使用非交互方式传入sql语句并执行将结果返回到控制台,在脚本常用。
3. 需要拿到所有的表:
[mysql@hadoop1 mysql]$ mysql -uroot -p123456 -s -e "use test;show tables;" | grep -v Tables_in
mysql: [Warning] Using a password on the command line interface can be insecure.
user
4. 待优化的脚本:
5. 优化之后的脚本:



mysql集群架构


1. mysql binlog日志:
https://zhuanlan.zhihu.com/p/52455547 https://blog.csdn.net/weixin_33893111/article/details/113424335 https://www.cnblogs.com/clsn/p/8150036.html
binlog即binary log,二进制日志文件,这个文件记录了MySQL所有的DML操作(记录数据库中所有的修改操作)。
通过binlog日志我们可以做数据恢复,增量备份,主主复制和主从复制等等
2. 二进制日志模式:
1)STATMENT模式
基于SQL语句的复制(statement-based replication, SBR),每一条会修改数据的sql语句会记录到binlog中。
优点:不需要记录每一条SQL语句与每行的数据变化,这样子binlog的日志也会比较少,减少了磁盘IO,提高性能。
缺点:数据记录的不详细。
2)基于行的复制(row-based replication, RBR,公司基本都会采用这种模式):
不记录每一条SQL语句的上下文信息,仅需记录哪条数据被修改了,修改成了什么样子了。
优点:不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题。并且记录的很详细。
缺点:会产生大量的日志,尤其是alter table的时候会让日志暴涨。
解决:会设置日志的过期时间expire_logs_days = 7。
3)混合模式复制(mixed-based replication, MBR):
以上两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式。
  • 开启binlog日志需要在配置文件中添加:

    server-id;
    log-bin : 指定binlog日志存放的位置;
    log-format :采用什么模式用存放binlog。
  • 查看binlog日志文件的命令:

[mysql@hadoop1 arch]$ mysqlbinlog --no-defaults --base64-output=decode-rows -vvv mysql-bin.000003
3. 主从复制:
4. 开启主从同步的步骤:
1)主库开启binlog日志,并且需要保证主从库的server-id不一致,如果一旦修改了server-id(需要修改的是my.cnf),需要重启mysql数据库。
[mysql@hadoop2 relay_log]$ exit
logout
[root@hadoop2 ~]# service mysql restart
Shutting down MySQL.. SUCCESS!
Starting MySQL. SUCCESS!
2) 在主库中执行,创建用于主从复制的mysql 用户,并且赋予可以拿到binlog日志的日志权限。

创建用户:

mysql> create user reproduce@localhost identified by 123456;
Query OK, 0 rows affected (0.02 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

验证:

远程访问:

加权限(在主库使用root用户):

mysql> grant replication slave on *.* to reproduce@% identified by 123456;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql>
 flush privileges;
Query OK, 0 rows affected (0.01 sec)

验证:

3)需要在从库中执行
需要在主库中查看最新的binlog日志文件名和最新的记录点:
在从库中执行(用root用户执行,需要改成你的主库的binlog名称和记录点):
change master to
master_host=192.168.174.10,
master_port=3306,
master_user=reproduce,
master_password=123456,
master_log_file=mysql-bin.000002,
master_log_pos=1680;
需要开启丛库的两个线程:
IO_thread
SQL_thread
mysql> start slave;
Query OK, 0 rows affected (0.02 sec)
4)验证
查看两个线程的状态:
mysql> show slave statusG
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
在主库中创建库和表,在从库中是能同步的,并且看中继日志,也是同步的:
[mysql@hadoop2 relay_log]$ mysqlbinlog --no-defaults --base64-output=decode-rows -vvv relay-log.000002
如果不是双yes,需要停两个线程并重新指定:
mysql> stop slave;
重新指定:
mysql> start slave。


本文作者:郑平安

本文来源:IT那活儿(上海新炬王翦团队)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129632.html

相关文章

  • 简单五步教你搭建MySQL主从复制

    摘要:环境主机从机环境目标实现主机到从机基于的主从复制目前提供两种方式主从复制基于我们此篇就是基于的主从复制基于第步下载并分别安装到主机和从机,网上有很多例子。第步在主机和从机上分别拷贝配置文件到下。可以创建库或者表查看同步情况。 环境 主机:172.17.0.2从机:172.17.0.3环境:CentOS7MySQL:5.6.38目标:实现主机172.17.0.2到从机172.17.0.3...

    liangzai_cool 评论0 收藏0
  • 简单五步教你搭建MySQL主从复制

    摘要:环境主机从机环境目标实现主机到从机基于的主从复制目前提供两种方式主从复制基于我们此篇就是基于的主从复制基于第步下载并分别安装到主机和从机,网上有很多例子。第步在主机和从机上分别拷贝配置文件到下。可以创建库或者表查看同步情况。 环境 主机:172.17.0.2从机:172.17.0.3环境:CentOS7MySQL:5.6.38目标:实现主机172.17.0.2到从机172.17.0.3...

    liuhh 评论0 收藏0

发表评论

0条评论

IT那活儿

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<