MySQL5.7.19安装及主从复制构架配置

2022-08-17 14:02:20 浏览数 (1)

这段时间单位安排了一个项目,需求方要求不能用Oracle,必须用开源的MySQL。这可真出了个难题,主要是我不用MySQL好多年。单位dba又是Oracle方向的而且在歇产假,所以只能自己上阵了。

闲话少叙,进入正题。

 一、准备工作

先去官网上找mysql的安装包, https://www.mysql.com/ → DOWNLOADS → Community → MySQL Community Server → MySQL Community Server 5.7.19

我的操作系统是64位CentOS 7.3 在Select Operating System:里面没有这个系统,所以直接选的Red Hat Enterprise Liunx / Oracle Linux 在Select OS Version:里选择了Red Hat Enterprise Liunx 7 / Oracle Linux 7 (x86, 64-bit)

然后下载RPM Bundle(mysql-5.7.19-1.el7.x86_64.rpm-bundle.tar),大小是565.4M

二、安装MySQL5.7.19

下载完成后解压缩:tar -xvf mysql-5.7.19-1.el7.x86_64.rpm-bundle.tar 能够解压出12个包: mysql-community-client-5.7.19-1.el7.x86_64.rpm mysql-community-common-5.7.19-1.el7.x86_64.rpm mysql-community-devel-5.7.19-1.el7.x86_64.rpm mysql-community-embedded-5.7.19-1.el7.x86_64.rpm mysql-community-embedded-compat-5.7.19-1.el7.x86_64.rpm mysql-community-embedded-devel-5.7.19-1.el7.x86_64.rpm mysql-community-libs-5.7.19-1.el7.x86_64.rpm mysql-community-libs-compat-5.7.19-1.el7.x86_64.rpm mysql-community-minimal-debuginfo-5.7.19-1.el7.x86_64.rpm mysql-community-server-5.7.19-1.el7.x86_64.rpm mysql-community-server-minimal-5.7.19-1.el7.x86_64.rpm mysql-community-test-5.7.19-1.el7.x86_64.rpm

安装新版mysql之前,我们需要将系统自带的mariadb-lib卸载 执行 rpm -qa|grep mariadb 查看系统内安装的MariaDB的数据库 mariadb-libs-5.5.44-2.el7.centos.x86_64 卸载 rpm -e mariadb-libs-5.5.44-2.el7.centos.x86_64 --nodeps

然后按照下面的顺序逐一安装MySQL: rpm -ivh mysql-community-common-5.7.19-1.el7.x86_64.rpm rpm -ivh mysql-community-libs-5.7.19-1.el7.x86_64.rpm rpm -ivh mysql-community-client-5.7.19-1.el7.x86_64.rpm rpm -ivh mysql-community-server-5.7.19-1.el7.x86_64.rpm

在安装server包的时候,系统报错:

error: Failed dependencies: libaio.so.1()(64bit) is needed by mysql-community-server-5.7.19-1.el7.x86_64 libaio.so.1(LIBAIO_0.1)(64bit) is needed by mysql-community-server-5.7.19-1.el7.x86_64 libaio.so.1(LIBAIO_0.4)(64bit) is needed by mysql-community-server-5.7.19-1.el7.x86_64 我安装了 yum install libaio 包问题解决。

error: Failed dependencies: /usr/bin/perl is needed by mysql-community-server-5.7.19-1.el7.x86_64 perl(Getopt::Long) is needed by mysql-community-server-5.7.19-1.el7.x86_64 perl(strict) is needed by mysql-community-server-5.7.19-1.el7.x86_64 我安装了 yum install perl 包问题解决。

安装完成后初始化数据库: 执行 mysqld --initialize 执行后会在/var/log/mysqld.log里生成随机密码:A temporary password is generated for root@localhost: 6fQPWsSNw0-= 记住这个初始化密码,首次登陆mysql数据库要用到的。

更改mysql数据库目录的所属用户及其所属组 chown mysql:mysql /var/lib/mysql -R

启动mysql数据库 systemctl start mysqld.service

登陆mysql数据库 mysql -uroot -p'前面在mysqld.log里获取到的初始密码' 登陆成功后修改密码:mysql > set password=password('pwd_123456'); 然后修改用户允许访问数据库的IP和过期时间: mysql > use mysql; mysql > update user set host='%', password_expired='N' where host='localhost'; // 我在这里配置的是允许任何IP访问,并且账户永不过期。 mysql > SELECT `Host`, `User`, password_expired FROM `user`; mysql > flush privileges; mysql > exit;

至此MySQL5.7.19已经安装完成,通过Navicat for MySQL链接正常。

三、搭建MySQL主从复制

先说一下测试环境: 主数据库的ip地址:172.20.1.139 从数据库的ip地址:172.20.1.141 确保主数据库与从数据库一模一样。 使用root用户分别在主数据库和从数据库上创建好库“test_db”,并且在“test_db”库里创建结构完全一样的表“t_user”。 如果创建表的时候报错(插入、修改时也可能会报这个错) [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatiblewith sql_mode=only_full_group_by 解决办法是在 /etc/my.cnf 里加上下面这行配置: sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

在主数据库上创建同步账号 mysql > GRANT REPLICATION SLAVE,FILE ON *.* TO 'ms_user'@'172.20.1.141' IDENTIFIED BY '123456'; 172.20.1.141:是运行使用该用户的ip地址,从数据库IP ms_user:是新创建的用户名 123456:是新创建的用户名的密码 授权ms_user可以使用test_db库的所有权限:grant all privileges on test_db.* to ms_user@'%' identified by '123456';

配置主数据库的my.cnf文件 [mysqld] server-id=1 log-bin=log binlog-do-db=mstest // 要同步的test_db数据库,要同步多个数据库,就多加几个replicate-db-db=数据库名 binlog-ignore-db=mysql  // 不同步的数据库

配置从数据库的my.cnf文件 [mysqld] server-id=2 binlog-do-db=mstest // 要同步的test_db数据库,要同步多个数据库,就多加几个replicate-db-db=数据库名 binlog-ignore-db=mysql  // 不同步的数据库

重启数据库服务 systemctl restart mysqld.service

登陆从数据库,执行语句: mysql > change master to master_host='172.20.1.139', master_user='ms_user', master_password='123456', master_port=3306; master_host:是主数据库服务器IP地址 master_user:是前面创建的同步账号 master_password:是同步账号的密码 master_port:是主数据库服务器的端口 mysql > start slave; 如果启动成功,可以执行show slave statusG检查状态, 如果slave_io_running和slave_sql_running都为yes,那么表明可以成功同步数据了。

用ms_user用户登陆主数据库服务器(不要忘了给ms_user用户授权使用test_db库),向t_user表里插入一条记录,然后检查从数据库的t_user,应该也出现了一条相同记录。说明部署成功。

四、后记 去O化是趋势,mysql有很多种高性能的构架方式。很想好好研究研究,以后能彻底替换掉单位的oracle数据库。

0 人点赞