版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/vbirdbest/article/details/83153417
一:MySQL安装
1、下载tar包,这里使用wget从官网下载
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz
2、将mysql安装到/usr/local/mysql下
# 解压
tar -xvf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz
# 移动
mv mysql-5.7.22-linux-glibc2.12-x86_64 /usr/local/
# 重命名
mv /usr/local/mysql-5.7.22-linux-glibc2.12-x86_64 /usr/local/mysql
3、新建data目录
mkdir /usr/local/mysql/data
4、新建mysql用户、mysql用户组
# mysql用户组
groupadd mysql
# mysql用户
useradd mysql -g mysql
5、将/usr/local/mysql的所有者及所属组改为mysql
chown -R mysql.mysql /usr/local/mysql
6、初始化mysql
/usr/local/mysql/bin/mysqld --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data --initialize
# 如果出现以下错误, 则执行下面的命令来安装numactl,然后再重新执行上面的mysqld命令
/usr/local/mysql/bin/mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory
yum -y install numactl
7、编辑my.cnf
[mysqld]
datadir=/usr/local/mysql/data
basedir=/usr/local/mysql
socket=/tmp/mysql.sock
user=mysql
port=3306
character-set-server=utf8
# 取消密码验证
skip-grant-tables
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# skip-grant-tables
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
8、开启服务
# 将mysql加入服务
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
# 开机自启
chkconfig mysql on
# 启动mysql服务
service mysql start
9、设置密码
# 登录(由于/etc/my.cnf中设置了取消密码验证,所以此处密码任意)
/usr/local/mysql/bin/mysql -u root -p
# 操作mysql数据库
>use mysql;
# 修改密码
>update user set authentication_string=password('你的密码') where user='root';
>flush privileges;
>exit;
10、将/etc/my.cnf中的skip-grant-tables删除
11、登录再次设置密码(不知道为啥如果不再次设置密码就操作不了数据库了)
/usr/local/mysql/bin/mysql -u root -p
>ALTER USER 'root'@'localhost' IDENTIFIED BY '修改后的密码';
>exit;
12、允许远程连接
/usr/local/mysql/bin/mysql -u root -p
>use mysql;
>update user set host='%' where user = 'root';
>flush privileges;
>eixt;
13、添加快捷方式
ln -s /usr/local/mysql/bin/mysql /usr/bin
- 创建数据库
CREATE DATABASE `testdb` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# 永久禁用防火墙(需要重启虚拟机)
systemctl disable firewalld.service
reboot
# 在虚拟机上查看一下IP地址
ifconfig
15、远程连接mysql
mysql -h 172.16.128.128 -u root -p
> show databases;
注意:最好设置一下静态ip地址,如果不设置ip可能会变,主从复制就不成功。
二:克隆多台虚拟机
克隆多台虚拟机: VMWare Fusion 虚拟机–> 创建完整克隆
这里克隆两次,即总共3台,克隆完成之后需要修改第二台和第三台的mysql的uuid值,随便修改一下即可只要保证三台机器的uuid不同即可
sudo vim /usr/local/mysql/data/auto.cnf
三:MySQL 主从复制配置(一主两从)
①:master操作
-
修改master上的mysql配置文件
vi /etc/my.cnf[mysqld] # servier-id 每台mysql都要不同 server-id=1 log-bin=mysql-bin
-
在Master建立账户并授权Slave
# 授权一个用户名为rep,密码为root # *.*代表所有库的所有表(可以指定库.表) # ip代表只能该ip段下有权限访问, 即配置从服务器的前两个ip段即可,我的两个slave都是172.16段 mysql> grant replication slave on *.* to 'rep'@'172.16.xxx.%.%' identified by 'root';
-
重启mysql服务
service mysql restart;
-
查看master状态
# File 和 Position 两个字段比较重要 mysql> show master status; +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000005 | 307 | | | | +------------------+----------+--------------+------------------+-------------------+
② slave1操作
-
修改/etc/my.cnf
[mysqld] server-id=2 log-bin=relay-bin
-
重启mysql
service mysql restart;
-
slave指定master信息
mysql> change master to mysql> master_host='172.16.128.128', mysql> master_port=3306, mysql> master_user='rep', mysql> master_password='root', mysql> master_log_file='mysql-bin.000005', mysql> master_log_pos=154;
-
启动slave
mysql> start slave; mysql> show slave status\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 172.16.128.128 Master_User: rep Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000005 Read_Master_Log_Pos: 307 Relay_Log_File: yuslave1-relay-bin.000005 Relay_Log_Pos: 473 Relay_Master_Log_File: mysql-bin.000005 # Slave_IO_Running和Slave_SQL_Running必须为Yes Slave_IO_Running: Yes Slave_SQL_Running: Yes
Slave_IO_Running和Slave_SQL_Running必须为Yes,如果有一个为NO主从复制就不成功。
Slave_IO_Running: NO 之三大原因:https://blog.csdn.net/mqsyoung/article/details/78361469
③ slave2操作
修改/etc/my.cnf,其它步骤和slave1操作完全一样
[mysqld]
server-id=3
log-bin=relay-bin
④ 测试主从复制
# 在master上创建一个数据库
mysql> create database testdb;
# 在slave1和slave2上看testdb是否存在
mysql> show databases;
参考文章:
- 【MySQL】mysql实现主从复制(Linux) https://blog.csdn.net/sds15732622190/article/details/72594792
- linux系统mysql主从配置 https://www.cnblogs.com/lay2017/p/9043985.html