环境说明
笔者使用的使用vmware虚拟机,在虚拟机安装好mysql后,再克隆一份镜像作为mysql的slave,完成主从复制配置。
1.下载mysql的安装包
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
yum -y localinstall mysql57-community-release-el7-11.noarch.rpm
2.yum安装mysql,这里可能需要点时间
yum -y install mysql-community-server
等待一小会时间,安装完毕
3.启动mysql
systemctl start mysqld
#设置mysql为开机自启动
systemctl enable mysqld
4.登录mysql,修改密码
1.mysql安装完成之后,默认会在/var/log/mysqld.log文件中生成了一个root的临时密码。
vim /var/log/mysqld.log
2.复制该密码,然后登录mysql,并修改初始密码
mysql -u root -p
# 修改密码
mysql>ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
如果出现提示密码强度太弱
可以添加以下修改,降低密码强度
mysql> set global validate_password_policy=0;
mysql> set global validate_password_length=1;
再次修改密码即可
mysql>ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
以下是各个密码参数的含义
参数 | 作用 |
---|---|
validate_password_policy | 密码强度检查等级,0/LOW、1/MEDIUM、2/STRONG |
validate_password_mixed_case_count | 密码中大小字母的长度 |
validate_password_number_count | 密码中数据的长度 |
validate_password_special_char_count | 密码中特殊字符的长度 |
validate_password_length | 密码长度参数默认为8,它有最小值的限制,要大于等于number_count的值 |
3.开启mysql的远程登录
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
Query OK, 0 rows affected, 1 warning (0.00 sec)
5.开放防火墙的3306端口
如果服务器安装有防火墙,需要开放3306端口给mysql,如没有安装防火墙则忽略此步。
vim /etc/sysconfig/iptables
添加代码:
-A INPUT -p tcp --dport 3306 -j ACCEPT
# 重启防火墙
service iptables restart
6.设置mysql编码为utf-8
vim /etc/my.cnf
添加以下代码:
character_set_server=utf8
init_connect='SET NAMES utf8'
# 重启mysql
systemctl restart mysqld
7.本地远程连接
8.主从复制配置,配置master
1.克隆镜像,选择一个为master一个为slave
虚拟机克隆镜像教程
2.配置master
修改master的配置文件
vim /etc/my.cnf
往my.cnf上添加如下代码
[mysqld]
log_bin=mysql-bin //启用二进制日志
server-id=10//服务器唯一ID必须要与从库不同,默认是1,一般取IP最后一段
3.创建授权用户
登录master的mysql命令行,mysql -u root -p 密码 ,创建一个用于从服务器复制的用户。
mysql>GRANT REPLICATION SLAVE ON *.* to 'root'@'%' identified by '123456';
代码含义:"."表示对所有库的所有操作,“%”表示所有客户端都可能连,也可用具体客户端IP代替,如你的本机ip
4.master的mysql状态信息
查看命令
mysql>show master status;
代码含义:file的mysql-bin.000001 是用于主从复制的文件名,
position的437是日志文件内的最新位置,这两个值待会在slave中有用。
9 主从复制配置,配置slave
注意直接克隆的虚拟机会导致每个数据库的 uuid 相同,需要修改为不同的 uuid,
可以参考我的这篇文章 https://blog.csdn.net/weixin_39025362/article/details/106666377
1.修改slave配置
vim /etc/my.cnf
添加如下代码:
[mysqld]
log_bin=mysql-bin
server-id=11 //slave的server-id必须与master的不同
2.将slave指向master
登录从库的mysql,mysql -u root -p 密码
mysql>change master to master_host='master的ip',master_user='root',master_password='123456',
master_log_file='mysql-bin.000005',master_log_pos=154;
# 启动slave
mysql>start slave;
# 查看slave状态
mysql> show slave status\G;
10 主从同步原理:
- 需要看的状态有两个,IO线程状态的 Slave_IO_Running和SQL线程状态的 Slave_SQL_Running,这两个的状态必须为Yes,否则就是配置失败。
- 如果SQL线程没有正常工作,也就是Slave_SQL_Running: No。通常是master和slave的数据库不一致,需要手动的将master上mysql的最新记录都复制到slave上的mysql了。
- 从库同步主库数据的方式是Master把它的binlog日志传递给slaves来达到master-slave数据一致的目的,binlog日志记录了Master所有的 DDL 和 DML 语句(除了数据查询语句select、show等),还包含语句所执行的消耗的时间,常用数据复制和恢复。
测试
当IO线程状态的 Slave_IO_Running和SQL线程状态的 Slave_SQL_Running,都为Yes时,
可以在master中进行插入、修改、删除数据等操作,刷新slave后查看数据变化。