vlambda博客
学习文章列表

CentOS 8 用Yum安装MySQL 8.0(更新构建主备模式)

一、添加Yum仓库


下载完成后用SecureCRT连接到服务器,用rz命令将rpm包上传到服务器

然后在服务器执行命令安装rpm包(如果已经是用root账号登录,下面所有命令都无需加sudo):

#sudo yum localinstall mysql80-community-release-el8-1.noarch.rpm


二、停用CentOS 8自带的MySQL模块

因为CentOS8的内核自带了MySQL模块,不停用是不能安装新版本的,需执行命令停用:

#sudo yum module disable mysql

CentOS 8 用Yum安装MySQL 8.0(更新构建主备模式)


三、安装MySQL并启用

#sudo yum install mysql-community-server

安装好之后千万别先启动 !!!

MySQL8默认大小写敏感,改为不敏感只会在初始化的时候起作用,


编辑配置文件my.cnf


#vi /etc/my.cnf


下图为没更改过的初始配置

CentOS 8 用Yum安装MySQL 8.0(更新构建主备模式)

在最下面追加lower_case_table_names = 1


另外,/var/lib/mysql目录是默认的数据库存储路径,通常情况下需要改为其它空间较大的位置,有需要的话可以修改datadir和socket


如果修改了socket,别忘记建立软连接,不然无法使用mysql -u命令登录,建立软连接,

ln -s /……新路径……/mysql.sock /var/lib/mysql/mysql.sock


关闭selinux

永久关闭:

vi /etc/selinux/config

内容改为

SELINUX=disabled

临时关闭:

setenforce 0


接下来设置开机自启并启动mysql

#sudo systemctl enable mysqld

#sudo systemctl start mysqld


#sudo systemctl status mysqld


查询生成的root密码:

#sudo grep 'temporary password' /var/log/mysqld.log


注意如果系统之前安装过MySQL则必须删除残留数据,不然会生成不了root密码,删除残留数据命令:

#sudo rm -rf /var/lib/mysql

#sudo systemctl restart mysqld


查到生成的初始密码后,登录MySQL修改root密码:

#mysql -uroot -p


输入初始密码后执行SQL命令:

mysql>ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';


通常不会用root账号来连接MySQL服务器,所以需要建个账号:

mysql>CREATE USER 'test'@'%' IDENTIFIED BY 'MyNewPass4!';

%代表任意IP都可以连接,localhost代表只有本机可以连接


建好账号后赋予权限:

mysql>GRANT ALL PRIVILEGES ON *.* to 'test'@'%' WITH GRANT OPTION;


此时用Navicat客户端连接MySQL可能会出现2059错误连接不上,是因为MySQL8更改了加密方式,将加密方式改回原版的:

mysql>ALTER USER 'test'@'%' IDENTIFIED WITH mysql_native_password BY 'MyNewPass4!';


mysql>show variables like '%time_zone%';

mysql>set time_zone='+8:00';

mysql> select now();

mysql> flush privileges;

退出MySQL:

mysql>exit


现在可以用Navicat连接到MySQL了,MySQL8的默认字符集为utf8mb4,连emoji表情都默认可存了,无需再为字符集操心。


主备模式构建:

主库配置,建立账号,赋予权限,注意密码加密方式改为上文中的,否则备库查看slave状态时会提示Last_IO_Error错误

CREATE USER 'repl'@'%' IDENTIFIED BY '123456';

GRANT replication slave ON *.* TO 'repl'@'%';

flush privileges;


vi /etc/my.cnf

[mysqld]
server_id = 1
log_bin = /var/log/mysql/mysql-bin.log
sync_binlog = 1
binlog_format = ROW
binlog_do_db = test
binlog_ignore_db= mysql
default_authentication_plugin = mysql_native_password
  • server_id用于给服务器编号,注意主备编号不要重复。

  • log_bin:Binlog存储路径。

  • sync_binlog:开启Binlog同步,在每次提交事务前会将二进制日志同步到磁盘。

  • binlog_format:binlog的日志格式,选择基于行的复制。

  • binlog_do_db:需要记录Binlog进行备份的数据库名,有多个的话设置多行(注意做好主备后再去建对应的数据库)。

  • binlog_ignore_db:忽略的DB。

  • default_authentication_plugin配置客户端连接的认证方式配置

在/var/log/下创建mysql文件夹,修改用户权限

chown -R mysql:mysql mysql


重启

systemctl restart mysqld


登录mysql查看主库状态

show master status;



配置备库

vi /etc/my.cnf

[mysqld]
server_id = 2
log_slave_updates = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_format = ROW
replicate_do_db = test
replicate_ignore_db = mysql

在/var/log/下创建mysql文件夹,修改用户权限

chown -R mysql:mysql mysql


systemctl restart mysqld


登录备库设置与主库的连接

mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.xx.xx',
-> MASTER_USER='repl',
-> MASTER_PASSWORD='123456',
-> MASTER_LOG_FILE='mysql-bin.000001',
-> MASTER_LOG_POS=0;

  • MASTER_HOST设置成主机的IP。MASTER_USER和MASTER_PASSWORD是我们之前在主机设置的用于复制的专用账号和密码。

  • MASTER_LOG_FILE需要和通过查看主库状态的binlog文件一致。

  • MASTER_LOG_POS复制位置默认为0,表示从头开始跟踪事件。这种配置可能不是最好的,比如数据库本来就很大,可以先手动同步一次。

START SLAVE;

SHOW SLAVE STATUS\G;

Last_IO_Error无错误,并有如下显示则成功:

Slave_IO_State: Waiting for master to send event
Slave_IO_Running: Yes
Slave_SQL_Running: Yes


查看主库

show processlist;

显示

Source has sent all binlog to replica; waiting for more updates


查看备库

show processlist;

显示

Replica has read all relay log; waiting for more updates