纯纯的干货,Ubuntu系统下安装MySQL本文绝对够你用了
一、Ubuntu安装MySQL
Ubuntu的源仓库里维护着MySQL的最新源数据,可以使用apt命令直接安装最新的MySQL。
1.2、更新本地的源数据
sudo apt update
1.3、查看MySQL最新版本
1.3.1、到MySQL官网查看最新版本的MySQL
MySQL :: Download MySQL Community Server
![](https://img-blog.csdnimg.cn/img_convert/0e0379b705eb3c4abfc6aa41a69ce416.png)
1.3.2、查看Ubuntu源中的MySQL最新版本
使用 apt-cache pkgnames 命令,列出所有可用软件包
#查询mysql相关的软件包 apt-cache pkgnames | grep mysql # 有点多,根据返回的数据,进一步筛选mysql-server apt-cache pkgnames | grep mysql-server #可以看到这里有mysql-server-8.0 和mysql-server-core-8.0说明和官网大版本是一致的
apt search mysql-server 搜索适用与当前版本的软件包
# apt search mysql-server Sorting... Done Full Text Search... Done default-mysql-server/focal,focal 1.0.5ubuntu2 all MySQL database server binaries and system database setup (metapackage) default-mysql-server-core/focal,focal 1.0.5ubuntu2 all MySQL database server binaries (metapackage) mysql-server/focal-updates,focal-updates,focal-security,focal-security,now 8.0.28-0ubuntu0.20.04.3 all [installed] MySQL database server (metapackage depending on the latest version) mysql-server-8.0/focal-updates,focal-security,now 8.0.28-0ubuntu0.20.04.3 amd64 [installed,automatic] MySQL database server binaries and system database setup mysql-server-core-8.0/focal-updates,focal-security,now 8.0.28-0ubuntu0.20.04.3 amd64 [installed,automatic] MySQL database server binaries
可以看出目前可用的软件和官网的版本一致
1.4、安装MySQL
在ubuntu中安装mysql只要一行命令就可以了 sudo apt install mysql-server
*注意
通过apt安装的mysql
不需要
- 启动——安装好已经启动
- 设置开机启动——安装好已经设置
- 开启服务——安装好已经默认开启,并且服务名叫做mysql,而不是mysqld
1.5、MySQL服务管理
sudo service mysql status # 查看服务状态 sudo service mysql start # 启动服务 sudo service mysql stop # 停止服务 sudo service mysql restart # 重启服务
1.6、登陆
方法一:默认账户登录
查看密码使用sudo cat /etc/mysql/debian.cnf这条查看
方法二:直接进入mysql
命令:sudo mysql
方法三:本地root登陆
命令: mysql -u root -p
让输入密码,直接回车
1.7、远程连接
1.7.1、新建可以远程链接的用户
使用1.6的任意方法登陆,然后创建用户
#注意修改username为你想要的用户名,yourpassword为你的密码 create user 'username'@'%' identified by 'yourpassword'; #授权 GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION; #刷新权限 FLUSH PRIVILEGES;
1.7.2、允许远程登录
先关停mysql服务
#关闭mysql sudo systemctl stop mysql #或者使用 sudo service mysql stop # 停止服务
编辑mysql配置文件
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
注释掉bind-address
#bind-address = 127.0.0.1
再开启mysql服务即可sudo service mysql start
二、MySQL主从搭建
2.1、安装MySQL
在同一个局域网中安装两台版本一致的MySQL,在第一部分我们已经安装好了MySQL。
2.2、配置MySQL配置
2.2.1、修改主库配置
登陆服务器172.26.35.173
修改 vi /etc/mysql/mysql.conf.d/mysqld.cnf 配置
修改配置:
[mysqld] # 主从配置-主机(所有配置必须写在[mysqld]下) server-id = 173 # 服务器id,唯一 log_bin = /var/log/mysql/mysql-bin.log # 二进制日志,实现主从的关键 binlog_format = mixed # 日志格式,默认不是mixed推荐mixed binlog_expire_logs_seconds = 604800 # 日志过期的时间秒数(7天),默认2592000(30天) max_binlog_size = 200M # 最大二进制日志文件 binlog_do_db = test # 同步的数据库(如果不写,默认全部同步) #不给从机同步的库(多个写多行) binlog-ignore-db = mysql binlog-ignore-db = information_schema binlog-ignore-db = performance_schema binlog-ignore-db = sys
**binlog日志类型binlog_format**
一般电商系统都会有同步MySQL数据到其他中间件或者系统,例如EC、kafka、redis等,如果需要同步,并且时使用canal(阿里开源,使用广泛的同步方案),binlog_format必须要ROW 模式
2.2.2、修改从库配置
登陆服务器172.26.35.174
修改 vi /etc/mysql/mysql.conf.d/mysqld.cnf 配置
修改配置:
[mysqld] # (所有配置必须写在[mysqld]下) server-id = 174 # 服务器id,唯一 #加上以下参数可以避免更新不及时,SLAVE 重启后导致的主从复制出错 read_only = 1 master_info_repository = TABLE relay_log_info_repository = TABLE relay-log = relay-log
2.3、创建同步用户,配置同步
2.3.1、在主库上创建同步用户
主数据库创建用户slave并授权
mysql -uroot -p # 创建用户 create user 'slave'@'%' identified with mysql_native_password by 'password'; # 授权 grant replication slave on *.* to 'slave'@'%'; # 刷新权限 flush privileges;
在从库主机测试slave用户是否可用
mysql -uslave -p -h172.26.35.173 -P3306
主数据库查询服务ID及Master状态
# 登录 mysql -uroot -p # 查询server_id是否可配置文件中一致 show variables like 'server_id'; # 若不一致,可设置临时ID(重启失效) set global server_id = 1; # 查询Master状态,并记录 File 和 Position 的值 show master status; # 注意:执行完此步骤后退出主数据库,防止再次操作导致 File 和 Position 的值发生变化
2.3.2、从库设置同步
从数据库中设置主数据库
# 登录 mysql -uroot -p # 查询server_id是否可配置文件中一致 show variables like 'server_id'; # 若不一致,可设置临时ID(重启失效) set global server_id = 2; # 设置主数据库参数,此处为了方便看,以下面方式执行 change master to master_host='192.168.247.129', # 主机ip master_port=3306, master_user='用户名', # 1.2 中授权的用户 master_password='密码', master_log_file='mysql-bin.000001', # 2.3.1 中的File master_log_pos=544; # 2.3.1 中的Position #上面方便看,以下面的方式执行 change master to master_host='172.26.35.173',master_port=3306,master_user='slave',master_password='password',master_log_file='mysql-bin.000002',master_log_pos=156; # 开始同步 start slave; # 若出现错误,则停止同步,重置后再次启动 stop slave; reset slave; start slave; # 查询Slave状态 show slave status\G # 查看是否配置成功 # 查看参数 Slave_IO_Running 和 Slave_SQL_Running 是否都为yes,则证明配置成功。若为no,则需要查看对应的 Last_IO_Error 或 Last_SQL_Error 的异常值。
测试
# 在主数据库创建数据库test create database test; # 从数据库查看 show databases; # 在主数据库创建表 use test; create table t_user(id int, name varchar(20)); # 插入数据 insert into t_user values(1, 'C3Stones'); # 在从数据库查看 use test; select * from t_user; # 其他删改查操作请自行测试
2.4、半同步复制
2.4.1、主库配置
直接在配置文件中设置永久配置
修改 vi /etc/mysql/mysql.conf.d/mysqld.cnf 配置在[mysqld]下面添加对应配置
# 设置半同步插件 plugin-load="rpl_semi_sync_master=semisync_master.so" #添加或修改下行,需要先安装semisync_master.so插件后,再重启,否则无法启动 rpl_semi_sync_master_enabled=ON #加或修改下行,设置3s内无法同步,也将返回成功信息给客户端 rpl_semi_sync_master_timeout=3000
2.4.2、从库配置
修改 vi /etc/mysql/mysql.conf.d/mysqld.cnf 配置在[mysqld]下面添加对应配置
# 设置半同步插件 plugin-load="rpl_semi_sync_slave=semisync_slave.so" # #添加或修改下行,需要先安装semisync_master.so插件后,再重启,否则无法启动 rpl_semi_sync_slave_enabled= 1
2.4.3、信息确认
# 查看主从复制信息 mysql> show status like '%semi_sync%'; # 查看半同步复制状态 mysql> show variables like "rpl_semi_sync_%_enabled"; # 查看插件几个变量 mysql> show global variables like "%semi%"; +-------------------------------------------+------------+ | Variable_name | Value | +-------------------------------------------+------------+ | rpl_semi_sync_master_enabled | OFF | | rpl_semi_sync_master_timeout | 10000 | | rpl_semi_sync_master_trace_level | 32 | | rpl_semi_sync_master_wait_for_slave_count | 1 | | rpl_semi_sync_master_wait_no_slave | ON | | rpl_semi_sync_master_wait_point | AFTER_SYNC | | rpl_semi_sync_slave_enabled | OFF | | rpl_semi_sync_slave_trace_level | 32 | +-------------------------------------------+------------+
三、错误与解决
3.1、配置完半同步后MySQL启动失败
原因:配置错误,参考了别人错误的配置
解决关键:查看日志(Ubuntu中的MySQL错误日志位置:/var/log/mysql/)
3.2、主从同步状态,错误
查看从库同步状态时出现错误,如下:
![](https://img-blog.csdnimg.cn/img_convert/ff5cf5ded38c607d5abcf2c17365b3b1.png)
首次开启同步时错误, 原因不详,重新设置同步
#停止同步(新版slave改名为replica) stop replica; #查看主库log位置 show master status\G #重新设置同步位置(MASTER_LOG_FILE和MASTER_LOG_POS来源master) CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000026', MASTER_LOG_POS=0; #启动同步 start replica;
3.3、测试同步时报错
![](https://img-blog.csdnimg.cn/img_convert/38b2a20c52e5862060344efa39ed3083.png)
原因:从库replica(slave)启动前,主库master 创建了数据库test(测试同步用的),从库没有创建;replica启动后,主库删除了test(测试用),从库报错,导致同步进程关闭
![](https://img-blog.csdnimg.cn/img_convert/dd2a667a8615d86308190c767214725c.png)
解决:主库删除test之后从库重新设置同步位置,没有彻底解决,以后遇到了同步错误,一样会导致无法同步
可以使用MySQL同步参数set global sql_replica_skip_counter=1;跳过错误 **启动replica前都要设置*
#停止同步(新版slave改名为replica) stop replica; #跳过错误,注意每次重启replica前都要设置 set global sql_replica_skip_counter=1; #启动同步 start replica;
参考
MySQL安装
1、ubuntu20 安装和配置mysql8.0.23
2、Ubuntu20.04安装MySQL8.0
3、ubuntu软件包管理
4、MySQL读取配置文件的顺序、启动方式、启动原理
主从复制
5、ubuntu mysql8.0实现主从复制
6、MySQL主从结构搭建
7、mysql中binlog_format模式与配置详解
8、Linux安装Mysql8.0.20并配置主从复制(一主一从,双主双从)
半同步复制
9、一文看懂MySQL的异步复制、全同步复制与半同步复制
10、深入MySQL复制(三):半同步复制
**注意此参考文档插件名称错误**
![](https://img-blog.csdnimg.cn/img_convert/6277361cafe58378e08a7015d613fd92.png)