Linux安装:Mysql数据库
- 安装软件
- 16天前
- 42热度
- 0评论
1、安装
1.1、yum安装Mariadb
执行安装
yum install -y mariadb*
启动
systemctl start mariadb.service
开机启动
systemctl enable mariadb.service
测试
# mysql
>show databases;
>exit
执行安全配置,按提示操作
mysql_secure_installation
如果有需要,移动数据目录
mkdir /DATA/mysqldata
systemctl stop mariadb
cp -r /var/lib/mysql/* /DATA/mysqldata/
vi /etc/my.cnf
修改相关的路径
在[mysqld]下添加:
把原来的socket=/DATA/mysqldata/mysql.sock,前边加#注释掉,添加socket=/data/mysql.sock(以防有问题再改回来)。
新增
datadir =/data/mysqldata
[client]
socket=/data/mysql.sock
# 修改文件所属
chown -R mysql:mysql /DATA/mysqldata
授权selinux
chcon -R -t mysqld_db_t /DATA/mysqldata
systemctl start mariadb
1.2、docker安装Mysql5.7
1.2.1、获取镜像
去docker hub官方网站获取mysql镜像:https://hub.docker.com/_/mysql/
docker pull mysql:5.7
# 获取5.7的最后一个版本,这是官方的mysql版本,装载Ubuntu下
# 也可以获取其他版本的mysql 比如centos/mysql-57-centos7,安装的路径和配置略有不同
1.2.2、通过镜像创建容器并运行
创建mysql目录
cd /opt/mysql
mkdir data
运行mysql5.7基础容器
docker run -p 3306:3306 --name mysql -h mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
拷贝出配置文件
docker cp mysql:/etc/mysql/conf.d /opt/mysql/conf
关闭并删除基础容器
docker stop mysql
docker rm mysql
创建命令
vi docker_run.sh
docker run -p 3306:3306 --name mysql -h mysql --restart=always -v /etc/localtime:/etc/localtime:ro -v $PWD/conf:/etc/mysql/conf.d -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
-p 3306:3306:将容器的 3306 端口映射到主机的 3306 端口。
-h mysql 设置容器主机名
-v $PWD/conf:/etc/mysql/conf.d:将主机当前目录下的 conf 挂载到容器的 /etc/mysql/conf.d。
-v $PWD/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql。
-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。
1.2.3、开启远程登录权限
docker exec -it mysql /bin/bash
#进入容器
mysql -uroot -p
#进入mysql
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
#授权
mysql> flush privileges;
#刷新权限
2、配置参数
具体参数需要根据每台服务器情况调整
vi /etc/my.cnf
[mysqld]
character-set-server=utf8mb4
lower_case_table_names=1
back_log = 500
max_connections = 500
max_connect_errors = 60000
innodb_buffer_pool_size = 5G
innodb_log_file_size = 4G
innodb_log_buffer_size = 10M
innodb_flush_log_at_trx_commit = 2
table_open_cache = 6000
#慢日志
slow_query_log =1
long_query_time=3
slow_query_log_file=/opt/mysqldata/mysql-slow.log
[client]
default-character-set=utf8mb4
参数说明
参数 | 说明 |
back_log | mysql在瞬时能够接收的链接数。高并发时需要配置,默认80 |
max_connections | 最大连接数,视服务器性能,一般不超过2000,最高不超过4000 |
max_connect_errors | 对于同一主机,如果有超出该参数值个数的中断错误连接,则该主机将被禁止连接。如需对该主机进行解禁,执行:FLUSH HOST |
innodb_buffer_pool_size | 物理内存的70%-80%左右,不宜过大 |
innodb_flush_log_at_trx_commit | 1:性能最慢。每一次事务提交或事务外的指令都需要把日志写入(flush)硬盘,这是很费时,但不会丢失任何一个事务。 2:性能中等。不写入硬盘而是写入系统缓存。日志仍然会每秒flush到硬 盘,所以你一般不会丢失超过1-2秒的更新。 0:性能最快。但安全方面比较差,即使MySQL挂了也可能会丢失事务的数据。而值2只会在整个操作系统 挂了时才可能丢数据 |
table_open_cache | 表的缓存:2*max_connections-5*max_connections,但是不能大于操作系统文件描述符限制。当某一连接访问一个表时,MySQL会检查当前已缓存表的数量。如果该表已经在缓存中打开,则会直接访问缓存中的表已加快查询速度;如果该表未被缓存,则会将当前的表添加进缓存并进行查询。查看: > show global status like 'open%_tables'; > Open_tables正在打开的表数量。 > Opened_tables曾经打开过的表数量。 > 如果Open_tables的值已经接近table_open_cache的值,且Opened_tables还在不断变大,则需要加大table_open_cache |
innodb_log_file_size | 这个选项是设置 redo 日志(重做日志)的大小。redo 日志 是用来确保写入的数据能够快速地写入,并且持久化,还可以用于崩溃恢复。配置大可以提高性能,当时会降低崩溃恢复的速度。 MySQL 5.6,可以设置为4G以上 |
innodb_log_buffer_size | 这个设置项用来设置缓存还没有提交的事务的缓冲区的大小。默认值(1MB) 一般是够用的,但一旦事务之中带有大 blob/text 字段,这个缓冲区会被很快填满,并引起额外的 I/O 负载。看看 innodb_log_waits 这个状态变量的值,如果不是 0 的话,需要增加 innodb_log_buffer_size |
3、常见错误
3.1、ERROR 2003无法连接
ip监听错误,修改监听IP
gedit /etc/mysql.my.cnf
找到bind-address =127.0.0.1
修改为bind-address =0.0.0.0
重启
/etc/init.d/ mysql restart
在这种情况下如果再尝试远程连接,则会报出ERROR 1130 (HY000): Host '211.87..'is not allowed to connect to this MySQL server提示信息,不能远程连接数据库。
在MySQL host上按如下命令操作
mysql -u root -ppassword //进入mysql控制台
mysql>use mysql;
mysql>update user set host = '%' where user = 'root'; //这个命令执行错误时可略过
mysql>flush privileges;
mysql>select host, user from user; //检查‘%’ 是否插入到数据库中
mysql>quit