Mysql5.7部署、主从同步
一、 centos7部署MySQL-5.7数据库
前往官网下载对应的mysql。mysql官网
1.解压MySQL压缩包并创建数据目录
[root@localhost tmp]# tar -zxvf mysql-5.7.30-el7-x86_64.tar.gz -C /usr/local
[root@localhost tmp]# cd /usr/local/
[root@localhost local]# ln -s mysql-5.7.11-linux-glibc2.5-x86_64/ mysql //设置软连接
[root@localhost local]# cd mysql
[root@localhost mysql]# mkdir -p arch data tmp
2.创建my.cnf文件
[root@localhost mysql]# vim /etc/my.cnf
3.创建用户组及目录
[root@localhost local]# groupadd -g 101 dba
[root@localhost local]# useradd -u 514 -g dba -G root -d /usr/local/mysql mysql
[root@localhost local]# id mysql
#如果存在用户mysql,请执行以下usermod命令
[root@localhost local]# usermod -u 514 -g dba -G root -d /usr/local/mysql mysql
#Copy环境变量配置文件至mysql用户的home目录中,否则就会出现 bash-4.2$ 这种情况
[root@localhost local]#cp /etc/skel/.* /usr/local/mysql
4.配置环境变量
[root@localhost mysql]# vim .bashrc
添加以下内容
# User specific environment and startup programs
export MYSQL_BASE=/usr/local/mysql
export PATH=${MYSQL_BASE}/bin:$PATH
unset USERNAME
#stty erase ^H
set umask to 022
umask 022
PS1=`uname -n`":"'$USER'":"'$PWD'":>"; export PS1
## end
[root@localhost local]# source .bashrc
5.赋予权限和用户组
[root@localhost local]# chown mysql:dba /etc/my.cnf
[root@localhost local]# chmod 640 /etc/my.cnf
[root@localhost local]# chown -R mysql:dba /usr/local/mysql/
[root@localhost local]# chmod -R 755 /usr/local/mysql/
6.安装依赖包以及初始化mysql
[root@localhost mysql]# yum -y install libaio
[root@localhost mysql]# su – mysql
[mysql@localhost ~]$ bin/mysqld --defaults-file=/etc/my.cnf --user=mysqladmin --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ --initialize
7.查看临时密码
[mysql@localhost ~]$ cat data/hostname.err |grep password
8.启动、登录以及修改用户密码
[localhost:mysql:/usr/local/mysql]# nohup /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf 2>&1 &
//root用户操作把MySQL加入到系统服务中
[root@localhost ~]# cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysql
[root@localhost ~]# chmod +x /etc/rc.d/init.d/mysql
localhost:mysql:/usr/local/mysql:>service mysql status
登录mysql服务,localhost:mysql:/usr/local/mysql:>mysql -uroot -p'(*77AT#f2tgI'
修改密码 mysql> alter user root@localhost identified by ' Qwer201102!';
添加远程权限 mysql> grant all privileges on *.* to 'root'@'%' identified by 'Qwer201102!';
刷新权限 mysql> flush privileges;
9.重启mysql服务、开放端口以及测试
localhost:mysqladmin:/usr/local/mysql:> service mysql restart
开放3306端口 firewall-cmd --zone=public --add-port=3306/tcp --permanent
刷新防火墙规则 firewall-cmd --reload
使用mysql工具连接测试
10.设置开机自启
[root@localhost ~]# chkconfig --add mysql
[root@localhost ~]# chkconfig mysql on
[root@localhost ~]# chkconfig --list
二、 ubuntu部署MySQL-5.7数据库
1.mysql软件下载
mysql官网
选择 Looking for previous GA versions?界面默认是mysql8.0版本,我们需要手动切换到5.x版本下载界面。
选择需要的版本下载,下载完之后上传到虚拟机内。
2.解压mysql安装包
tar -xvf mysql-server_5.7.31-1ubuntu16.04_amd64.deb-bundle.tar
解压后得到以下文件
3.使用dpkg安装mysql
sudo dpkg -i mysql-common_5.7.31-1ubuntu16.04_amd64.deb
sudo dpkg -i libmysqlclient20_5.7.31-1ubuntu16.04_amd64.deb
sudo dpkg -i libmysqlclient-dev_5.7.31-1ubuntu16.04_amd64.deb
sudo dpkg -i libmysqld-dev_5.7.31-1ubuntu16.04_amd64.deb
安装依赖,否则接下来安装会报错
sudo apt-get install libaio1
继续安装以下内容
sudo dpkg -i mysql-community-client_5.7.31-1ubuntu16.04_amd64.deb
sudo dpkg -i mysql-client_5.7.31-1ubuntu16.04_amd64.deb
sudo dpkg -i mysql-community-source_5.7.31-1ubuntu16.04_amd64.deb
接下来需要安装依赖包libmecab2
sudo apt-get install libmecab2
最后安装server包,安装过程中需要设置mysql的root账号密码,设置密码为qwer1234!
sudo dpkg -i mysql-community-server_5.7.31-1ubuntu16.04_amd64.deb
4.修改存储引擎及默认编码信息
将以下内容添加到mysql配置文件末尾(默认路径:/etc/mysql/mysql.conf.d/mysqld.cnf)
default-storage-engine=INNODB
init_connect='SET NAMES utf8mb4'
character-set-server = utf8mb4
character-set-client-handshake = FALSE
collation-server = utf8mb4_general_ci
注释 #bind-address = 127.0.0.1
5.配置远程登录
[root@localhost ~]# mysql -uroot -p #登录mysql服务
mysql> grant all privileges on *.* to 'root'@'%'identified by '密码' with grant option;
mysql> flush privileges;
mysql> exit
[root@localhost ~]# sudo service mysql restart #重启服务
6.检测是否能正常使用
三、 MySQL主从同步功能的实现
环境:172.18.12.34与172.18.12.47两台虚拟机都部署好mysql-5.7.31服务
虚拟机 | ip地址 |
---|---|
主库master | 172.18.12.47 |
从库slave | 172.18.12.34 |
1.主库master的配置
修改配置文件并重启mysql
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
log_bin = /var/lib/mysql/mylog-bin.log #主库日志记录文件位置
sync_binlog = 1 #同步日志记录的频率,1为每条都记录,安全但效率低
server-id = 47 #服务器唯一标识,主从数据库id不能相同
binlog-do-db = mysql #主库指定需要同步的数据库,多库多写几行
binlog-ignore-db = mysql #无需同步的数据库
expire_logs_days = 7 #binlog过期清理时间
登录mysql执行 show master status; 查看从库从哪个点开始同步数据
记录表中的数据File:mysql-bin.000012和Position:154,之后在从库中要用到。
注意:每次进入配置文件时这两个值都会改变,所以在查看完这两个值之后,直到从服务配置完成都不要对主库配置文件进行操作,否则将会值对应不上同步失败。
创建并授权用户,后两个slave分别是用户名和密码,IP为从库IP。
grant replication slave ,replication client on *.* to slave@'172.18.12.34' identified by "slave";
flush privileges;
flush tables with read lock; #锁定数据库为只读,确保备份数据一致性
2.从库slave的配置
编辑配置文件并重启MySQL服务
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
log_bin = /var/lib/mysql/mylog-bin.log #主库日志记录文件位置
sync_binlog = 1 #同步日志记录的频率,1为每条都记录,安全但效率低
server-id = 34 #服务器唯一标识,主从数据库id不能相同
同步数据有两种思路,一种是主库只发送从库需要的,在主库指定;另一种是主库发送所有数据,从库按需过滤接收。
replicate-do-db = mysql #从库过滤接收
replicate-ignore-db = mysql #忽略接受的库名
slave-skip-errors = all #跳过所有错误
slave-net-timeout = 60 #设置延时时间
expire_logs_days = 7 #binlog过期清理时间
在从库slave端的mysql服务指定主库master的相关参数。
mysql>CHANGE MASTER TO
MASTER_HOST='172.18.12.47',
MASTER_USER='slave',
MASTER_PASSWORD='slave',
MASTER_LOG_FILE='mysql-bin.000012',
MASTER_LOG_POS=154;
3.主从同步功能检测
从库启动slave
Mysql> start slave;
Mysql> show slave status\G #注意,没有分号
输出如下,显示两个都为yes即主从同步成功
主服务器开启只读锁 mysql> unlock tables;
打开数据库检测,传输数据到主库,从库即同步数据。