mysql+centos7+主从复制操作 2018-11-13
一、安装mysql(MariaDB)
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。
开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。
MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。
第一步:添加 MariaDB yum 仓库
- 1、首先在 RHEL/CentOS 和 Fedora 操作系统中添加 MariaDB 的 YUM 配置文件 MariaDB.repo 文件。编辑创建mariadb.repo仓库文件
vi /etc/yum.repos.d/MariaDB.repo
- 2、添加repo仓库配置
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
第二步:在 CentOS 7 中安装 MariaDB
当 MariaDB 仓库地址添加好后,你可以通过下面的一行命令轻松安装 MariaDB。
yum install MariaDB-server MariaDB-client -y
mariadb下载太慢的问题:
- 1.问题来源,那肯定是mariadb.repo这个仓库源的问题
- 为什么要配置这个(因为这是官方提供的mariadb rpm包源,下载一定不会出错,版本一定是最新的)-但是问题就是,yum install mariadb-server的时候去国外的源仓库下载,速率可能很慢
- 解决办法就是:安装epel源,通过他下载:
面临的问题是:
-可能软件包是旧的,没有更新
第三步:启动mariadb相关命令
systemctl start mariadb
安装完成
mariadb数据库的相关命令是:
systemctl start mariadb #启动MariaDB
systemctl stop mariadb #停止MariaDB
systemctl restart mariadb #重启MariaDB
systemctl enable mariadb #设置开机启动
二、初始化mysql
- 在确认 MariaDB 数据库软件程序安装完毕并成功启动后请不要立即使用。为了确保数据 库的安全性和正常运转,需要先对数据库程序进行初始化操作。这个初始化操作涉及下面 5 个 步骤。
- ➢ 设置 root 管理员在数据库中的密码值(注意,该密码并非 root 管理员在系统中的密 码,这里的密码值默认应该为空,可直接按回车键)。
- ➢ 设置 root 管理员在数据库中的专有密码。
- ➢ 随后删除匿名账户,并使用 root 管理员从远程登录数据库,以确保数据库上运行的业务的安全性。
- ➢ 删除默认的测试数据库,取消测试数据库的一系列访问权限。
- ➢ 刷新授权列表,让初始化的设定立即生效。
确保mariadb服务器启动后,执行命令初始化
mysql_secure_installation
执行完初始化命令后会弹出如下页面
三、mysql管理用户操作
-
修改mysql用户密码
set password = PASSWORD('密码');
生产环境里不会死磕root用户,为了数据库的安全以及和其他用户协同管理数据库,就需要创建其他数据库账户,然后分配权限,满足工作需求。 -
创建新用户
create user 用户名@'用户IP地址' identified by '密码';
-
查看用户的信息
先执行:use mysql;
再执行:select host,user,password from user where user='用户名';
image.png -
切换用户
mysql -u用户名 -p -h 127.0.0.1
查看用户数据库列表show databases;
四、数据库权限设置
mysql使用grant命令对账户进行授权
grant命令常见格式如下
grant 权限 on 数据库.表名 to 账户@主机名 对特定数据库中的特定表授权
grant 权限 on 数据库.* to 账户@主机名 对特定数据库中的所有表给与授权
grant 权限1,权限2,权限3 on *.* to 账户@主机名 对所有库中的所有表给与多个授权
grant all privileges on *.* to 账户@主机名 对所有库和所有表授权所有权限
退出数据库,使用root登录,开始权限设置
[root@master ~]# mysql -uroot -p
MariaDB [(none)]> use mysql;
MariaDB [(none)]> grant all privileges on *.* to 用户名@127.0.0.1;
MariaDB [mysql]> show grants for 用户名@127.0.0.1;
移除权限
MariaDB [(none)]> revoke all privileges on *.* from 用户名@127.0.0.1;
五、mysql中文编码设置
编辑mysql配置文件/etc/my.cnf
在配置文件中加入以下内容:
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
log-error=/var/log/mysqld.log
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
修改完配置文件,需要重启mysql,使得生效
systemctl stop mariadb
systemctl start mariadb
六、mysql远程登录授权配置
注意!关闭防火墙
iptables -F
清空防火墙规则
systemctl stop firewalld
关闭防火墙
systemctl disable firewalld
永久关闭防火墙开机自启
- 1、新建一个用于远程登录的账户
create user 'username'@'%' identified by 'password';
- 2、给与账户远程登录的权限,授权
grant all privileges on *.* to 'username'@'%' identified by 'password';
- 3、刷新权限表,防止不生效
flush privileges;
- 4.此时可以在windows登录你的linux数据库拉!!!!
- 首先在linux 上启动mysql服务
service mysqld start
- wingdows上输入:
mysql -uyonghu2 -p -h 10.0.0.10
- 首先在linux 上启动mysql服务
七、数据库备份与恢复
- 1.备份数据
mysqldump -u root -p --all-databases > /tmp/db.dump
- 2、恢复mysql数据
- 方法一:登录数据库后输入:
source /tmp/db.dump
- 方法二:在登录时候,进行数据写入
mysql -uroot -p < /tmp/db.dump
- 方法一:登录数据库后输入:
linux快捷命令:
-
ctrl+ d
等于logout 退出回话 -
ctrl + shift + r
等于快捷登录
八、mysql主从同步配置
主库设置:
- 首先把主机名改为master:
hostnamectl set-hostname master
- 然后从新连接
-
1.修改配置文件,开启主从同步的功能
修改配置文件:vim /etc/my.cnf
在文件的[mysqld]下边加入:
server-id=1
server-id服务的唯一标识(主从之间都必须不同)
log-bin=mysql-bin
log-bin启动二进制日志名称为mysql-bin
然后重启mariadb:
systemctl stop mariadb
systemctl start mariadb
重启后,mysql主库已经开启同步功能,创建了mysql-bin日志文件 -
2.创建用于主从同步的账号
create user 'username'@'%' identified by 'password';
-
3.给与账号slave的权限
grant replication slave on *.* to 'username'@'%';
-
4.检查一下主库创建的账号信息
select user,host from mysql.user;
-
5.检查授权账号的权限信息
show grants for username@'%';
-
6.实现主库的锁表,防止数据写入,数据复制失败
flush table with read lock;
-
7.此时可以检查主库的日志状态,已经锁表了,防止日志位置发生变化
show master status;
记录position -
8.开始数据备份,导出主库的已经存在数据,然后用于从库写入
mysqldump -uroot -p --all-databases > /data/my_all.dump
-
9.将主库的数据备份文件,scp到从库机器上,然后从库mysql导入数据
scp /tmp/all.dump root@10.0.0.11:/opt/
从库的设置:
首先关闭从库的防护墙
systemctl stop firewalld
setenforce 0
iptables -F
然后改主机名:hostnamectl set-hostname slave
重启连接:Ctrl d
Ctrl shift r
下载mariadb: yum install mariadb-server
启动mariadb:systemctl start mariadb
-
10.在从库上导入主库的最新数据,以便于数据一致性
- 1.登录slave数据库
- 2.删除slave当前机器所有的database,清空database数据,为了保证从库干净
- 3.登录数据库,导入数据
source /opt/all.dump
-
11.修改配置文件,添加用于同步的配置,和主库区别开
- vi /etc/my.cnf 写入配置
server-id=5
- vi /etc/my.cnf 写入配置
- 12.重启mariadb 从库
-
13.检查从库的各项参数
show variables like 'server_id';
show variables like 'log_bin';
show variables like 'server_id'; - 14.通过此命令,将slave库同于于master库
change master to master_host='10.0.0.10',
master_user='yonghu3',
master_password='123',
master_log_file='mysql-bin.000001',
master_log_pos=313;
-
15.开启主从同步的开关
start slave;
-
16.检查复制的状态
show slave status\G
-
17.检查从库同步的两条参数,均为yes确认同步成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
-
18.此时已经确认主从同步配置ok,前往主库解锁数据库,然后数据写入查看结果
- master上:
unlock tables;
解锁数据库
- master上:
补充
- mysql主从配置最好是读写分离
- 主库写入数据(root)
- 从库只能读取数据
配置从库: - 不能用root去登录,可以通过root给这个普通用户授权,grant create,seltct, *******
- 使用普通用户登录,在配置文件中添加 read-only=True (只对普通用户生效),达到一个从库只读效果