Linux下mysql双主热备部署
mysql双主热备部署
一、准备环境
1.1、服务器资源
服务名称:Linux主服务器1
IP:[请查看资源分配文档]
操作系统:CentOS 6.9 x64
服务名称:Linux从服务器2
IP:[请查看资源分配文档]
操作系统:CentOS 6.9 x64
1.2、检测系统是否已经安装过mysql或其依赖
# yum list installed | grep mysql
若像上图已装过要先将其删除,否则第4步使用yum安装时会报错
# yum -y remove mysql-libs.x86_64
二、安装mysql
2.1、mysql下载
下载地址:dev.mysql.com/downloads/m…
2.2、将压缩包放到 tools目录下并解压
把mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz
上传到/opt/tools
目录下,解压到/opt/app
目录下
# cd /opt/tools
tar -zxvf mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz -C /opt/app/
解压文件,结果出现
File size limit exceeded (core dumped)
使用命令 ulimit -f unlimited
# cd /opt/app/
目录改名
# mv mysql-5.7.32-linux-glibc2.12-x86_64 mysql-5.7.32
2.3、建立用户组和用户
# groupadd -g 501 mysql
# useradd -u 501 -g mysql -c mysqldb -r -s /bin/false mysql
在这里,有必要说明一下-r -s /bin/false,其实这个是mysql官方建议的,它建议msyql用户只作为文件或者目录的拥有者,而不具有登录shell的权限,-r指明是系统用户,-s /bin/false指明mysql用户不 具有登录shell的权限。当然,你也可以让mysql作为普通用户存在,具有登录shell的权限。
# useradd -u 501 -g mysql -c mysqldb mysql
注意:如果已经存在具有给定GID的组,则会出现以下错误:
groupadd: GID '501' already exists
与-o(--non-unique)选项一起使用时,groupadd命令允许你创建具有非唯一GID的组
2.4、设置权限
在这里也做一个说明,所有涉及到mysql的文件都将其所有者和所属组设置为mysql
# chown -R mysql:mysql mysql-5.7.32
2.5、安装mysql
# cd /opt/app/mysql-5.7.32/
# ./bin/mysqld --user=mysql --basedir=/opt/app/mysql-5.7.32/ --datadir=/opt/app/mysql-5.7.32/data --initialize
如果出现安装错误信息:
./bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
解决方法:
# yum install -y libaio
如果出现安装错误信息:
./bin/mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory
解决方法:
# yum -y install numactl
如果出现安装错误信息:
Errcode: 13 - Permission denied
解决方法:
直接定位到权限问题,但一直纠结于mysql文件夹内权限,没想到去上层目录查看,后经过排查发现是最上层的/opt权限就不对,可能是服务器迁移后这个出现了问题,把权限重新给了root755后,重新安装。
安装完成后再次执行mysql命令安装:
# ./bin/mysqld --user=mysql --basedir=/opt/app/mysql-5.7.32/ --datadir=/opt/app/mysql-5.7.32/data --initialize
安装如果成功,在这里,一定要注意最后生成的初始密码
,一定要复制留着备用,mysql在第一次登录的时候,需要用这个初始密码,如下图红色框框处:
创建/etc/my.cnf
# vi /etc/my.cnf
添加以下内容:
[mysqld]
basedir=/opt/app/mysql-5.7.32
datadir=/opt/app/mysql-5.7.32/data
socket=/tmp/mysql.sock
character_set_server=utf8
user=mysql
port = 3306
lower_case_table_names=1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
#配置导入sql文件最大300M
max_allowed_packet=300M
wait_timeout=200000
interactive_timeout = 200000
[mysqld_safe]
log-error=/opt/app/mysql-5.7.32/data/mysqld.log
pid-file=/opt/app/mysql-5.7.32/data/mysql.pid
tmpdir=/tmp
授权文件:
# chown -R mysql:mysql /etc/my.cnf
2.6、启动服务
# ./support-files/mysql.server start
服务启动无误如图:
2.7、把mysql放到本地系统服务中
# cp support-files/mysql.server /etc/init.d/mysqld
# chown -R mysql:mysql /etc/init.d/mysqld
重新用系统命令启动下mysql,看看系统命令是否生效:
# service mysqld restart
2.8、将msyql设置系统命令
# vi ~/.bash_profile
在文件末尾添加以下内容:
export PATH=$PATH:/opt/app/mysql-5.7.32/bin
使修改马上生效:
# source ~/.bash_profile
三、登录mysql
3.1、登录mysql数据库
输入刚才的初始密码
# mysql -uroot -p
3.2、为root用户设置新密码
mysql> alter user 'root'@'localhost' identified by "mysql12qw!@P@ssw0rd";
其中mysql12qw!@P@ssw0rd
是新密码
3.3、修改root用户为在任何客户端都可以登录
mysql> use mysql;
mysql> grant all on *.* to root@'%' identified by 'mysql12qw!@P@ssw0rd' with grant option;
mysql> flush privileges;
3.4. 删除匿名账户
select * from mysql.user where user='';
delete from mysql.user where user='' and host='<hostname>';
commit;
3.5. 修改数据库管理员root的名称
use mysql;
update mysql.user set user="mysqlUser" where user="root";
commit;
3.6. 不能存在有通配符%作为主机信息
update mysql.user set host='xxx.xx.xxx.%' where host='%';
这里xxx.xx.xxx需要替换为ip的前缀
3.7. 重启mysql
service mysqld restart
四、配置防火墙
启动3306端口
# vi /etc/sysconfig/iptables
添加以下内容:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
重启防火墙
# service iptables restart
五、客户端连接mysql
5.1、windows连接
使用客户端Navicat Premium工具连接mysql,如图:
六、从服务器安装mysql
略,与主服务器的安装步骤相同
七、mysql设置双主热备
7.1、主服务器配置
7.1.1、登录mysql数据库
# mysql -u mysqlUser -p
输入数据库密码
7.1.2、主库建立同步专用账户slave
在生产中心mysql数据库中建立一个同步专用账户slave
mysql> grant replication slave,reload,super on *.* to 'slave'@'ip' identified by 'mysql12qw!@P@ssw0rd';
其中ip代表从服务器的ip地址,xxx代表密码
mysql> flush privileges;
注释:ip为从服务器的IP,
slave
为账户 ,mysql12qw!@P@ssw0rd
为密码
7.1.3、服务器配置进行修改
# vi /etc/my.cnf
在[mysqld]下面添加如下内容:
server-id=1
log-bin=backuplog
sync_binlog=1
binlog_format=row
auto_increment_increment = 2
auto_increment_offset = 1
max_binlog_size=512m
expire_logs_days=1
binlog_do_db=dzjk_os
binlog_ignore_db=mysql,information_schema,performance_schema,sys
replicate_do_db=dzjk_os
slave_skip_errors=all
其中: server-id:为主服务器的ID值
log-bin:二进制变更日值
7.1.4、重启mysql服务
# service mysqld restart
(从现在起,它将把客户端有关数据库的修改记载到二进制变更日志里去)
7.1.5、主库启动同步到从库
登录mysql
# mysql -u mysqlUser -p
输入数据库密码
# mysql> stop slave;
# mysql> change master to master_host='ip',master_user='slave',master_password='mysql12qw!@P@ssw0rd';
注释:ip为从服务器的IP,slave为账户 ,
mysql12qw!@P@ssw0rd
为密码
# mysql> start slave;
查看设置是否正确命令:
# mysql>show slave status\G;
主要是看以下两项是否为YES:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
7.2、从服务器配置
7.2.1、登录mysql数据库
# mysql -u mysqlUser -p
输入数据库密码
7.2.2、从库建立同步专用账户slave
在生产中心mysql数据库中建立一个同步专用账户slave
mysql> grant replication slave,reload,super on *.* to 'slave'@'ip' identified by 'mysql12qw!@P@ssw0rd';
其中ip代表主服务器的ip地址,
mysql12qw!@P@ssw0rd
代表密码
mysql> flush privileges;
注释:ip为主服务器的IP,slave为账户 ,
mysql12qw!@P@ssw0rd
为密码
7.2.3、服务器配置进行修改
# vi /etc/my.cnf
在[mysqld]下面添加如下内容:
server-id=2
log-bin=backuplog
sync_binlog=1
binlog_format=row
auto_increment_increment = 2
auto_increment_offset = 1
max_binlog_size=512m
expire_logs_days=1
binlog_do_db=dzjk_os
binlog_ignore_db=mysql,information_schema,performance_schema,sys
replicate_do_db=dzjk_os
slave_skip_errors=all
其中: server-id:为从服务器的ID值
log-bin:二进制变更日值
7.2.4、重启mysql服务
# service mysqld restart
(从现在起,它将把客户端有关数据库的修改记载到二进制变更日志里去)
7.2.5、主库启动同步到从库
登录mysql
# mysql -u mysqlUser -p
输入数据库密码
# mysql> stop slave;
# mysql> change master to master_host='ip',master_user='slave',master_password='mysql12qw!@P@ssw0rd';
注释:ip为主服务器的IP,slave为账户 ,
mysql12qw!@P@ssw0rd
为密码
# mysql> start slave;
查看设置是否正确命令:
# mysql>show slave status\G;
主要是看以下两项是否为YES:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
最终的结果是:
在
主mysql
服务器创建一个test
数据库,从mysql
服务器,也能看到test
数据库,表
也是一样。
好了,以上就是Linux下mysql双主热备部署的全过程了,就是这样了!!!^_^
今天就先到这里了,溜了溜了溜了!!!^_^
觉得有收获的,帮忙点个赞
呗!!!
转载自:https://juejin.cn/post/7091267277613596686