ubuntu 18.04 安装mysql
查看有没有安装MySQL:
dpkg -l | grep mysql
安装MySQL:
apt install mysql-server
apt install mysql-client
apt install libmysqlclient-dev
安装完成之后可以使用如下命令来检查是否安装成功:
netstat -tap | grep mysql
mysql_secure_installation
该脚本将通过一系列的提示帮你完成MySQL安装安全选项的变更。第一个提示将询问你是否愿意安装密码检测插件,该插件用来测试你设置的MySQL密码的强壮性。无论你如何选择,下一个提示是让你设置MySQL root用户的密码。回车,然后需要确认你输入的密码。
secure enough. Would you like to setup VALIDATE PASSWORD plugin? # 要安装验证密码插件吗?
Press y|Y for Yes, any other key for No: N # 这里我选择N
Please set the password for root here.
New password: # 输入要为root管理员设置的数据库密码
Re-enter new password: # 再次输入密码
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y # 删除匿名账户
Success.
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : N # 禁止root管理员从远程登录,这里我没有禁止
... skipping.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y # 删除test数据库并取消对它的访问权限
-
Dropping test database...
Success. -
Removing privileges on test database...
Success.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y # 刷新授权表,让初始化后的设定立即生效
Success.
All done!
现在配置mysql允许远程访问,首先编辑 /etc/mysql/mysql.conf.d/mysqld.cnf 配置文件:
vim /etc/mysql/mysql.conf.d/mysqld.cnf
注释掉bind-address = 127.0.0.1
用户创建参考
https://www.cnblogs.com/wuxunyan/p/9095016.html
新建用户
格式:create user "username"@"host" identified by "password";
授权
格式:grant privileges on databasename.tablename to 'username'@'host' IDENTIFIED BY 'PASSWORD';
1. GRANT命令说明:
priveleges(权限列表),可以是all priveleges, 表示所有权限,也可以是select、update等权限,多个权限的名词,相互之间用逗号分开。
on用来指定权限针对哪些库和表。
. 中前面的号用来指定数据库名,后面的号用来指定表名。
to 表示将权限赋予某个用户, 如 jack@'localhost' 表示jack用户,@后面接限制的主机,可以是IP、IP段、域名以及%,%表示任何地方。注意:这里%有的版本不包括本地,以前碰到过给某个用户设置了%允许任何地方登录,但是 在本地登录不了,这个和版本有关系,遇到这个问题再加一个localhost的用户就可以了。
identified by指定用户的登录密码,该项可以省略。
WITH GRANT OPTION 这个选项表示该用户可以将自己拥有的权限授权给别人。注意:经常有人在创建操作用户的时候不指定WITH GRANT OPTION选项导致后来该用户不能使用GRANT命令创建用户或者给其它用户授权。
备注:可以使用GRANT重复给用户添加权限,权限叠加,比如你先给用户添加一个select权限,然后又给用户添加一个insert权限,那么该用户就同时拥有了select和insert权限。
2.授权原则说明:
权限控制主要是出于安全因素,因此需要遵循一下几个经验原则:
a、只授予能满足需要的最小权限,防止用户干坏事。比如用户只是需要查询,那就只给select权限就可以了,不要给用户赋予update、insert或者delete权限。
b、创建用户的时候限制用户的登录主机,一般是限制成指定IP或者内网IP段。
c、初始化数据库的时候删除没有密码的用户。安装完数据库的时候会自动创建一些用户,这些用户默认没有密码。
d、为每个用户设置满足密码复杂度的密码。
e、定期清理不需要的用户。回收权限或者删除用户。
eg:
/授予用户通过外网IP对于该数据库的全部权限/
grant all privileges on test
.* to 'test'@'%' ;
/授予用户在本地服务器对该数据库的全部权限/
grant all privileges on test
.* to 'test'@'localhost';
grant select on test.* to 'user1'@'localhost'; /给予查询权限/
grant insert on test.* to 'user1'@'localhost'; /添加插入权限/
grant delete on test.* to 'user1'@'localhost'; /添加删除权限/
grant update on test.* to 'user1'@'localhost'; /添加权限/
flush privileges; /刷新权限/
重启mysql:
1,sudo service mysql restart
2,sudo /etc/init.d/mysql restart
修改密码和添加用户从外部主机访问mysql server的权限
mysql> set password for ys@'%' = password('Yue1shuai!');
mysql> set password for ys@'localhost' = password('Yue1shuai!');
mysql> select user, host from mysql.user;
mysql> grant all privileges on *.* to ys@'%' WITH GRANT OPTION;
mysql> grant all privileges on *.* to ys@'localhost' IDENTIFIED BY 'Yue1shuai!' WITH GRANT OPTION;
让非mysql server的主机访问mysql server主机
1:
vim /etc/mysql/mysql.conf.d/mysqld.cnf
注释掉bind-address = 127.0.0.1
2:
mysql> grant all privileges on . to ys@'%' WITH GRANT OPTION;
设定server的默认字符集为utf8
编辑vim /etc/mysql/mysql.conf.d/mysqld.cnf文件
注意要在[mysqld]的下面添加
character-set-server=utf8
设置成不区分大小写
编辑vim /etc/mysql/mysql.conf.d/mysqld.cnf文件
注意要在[mysqld]的下面添加
lower_case_table_names=1
设定client的默认字符集为utf8
编辑 /etc/mysql/conf.d/mysql.cnf
在[mysqld]的下面添加
default-character-set=utf8
用下面命令查看字符集修改是否生效
show variables like'%char%';
执行结果:
mysql> show variables like'%char%';
+--------------------------------------+----------------------------+
| Variable_name | Value |
+--------------------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
| validate_password_special_char_count | 1 |
+--------------------------------------+----------------------------+
9 rows in set (0.01 sec)
也可以单独查看某个表的字符编码
SHOW CREATE TABLE table_name;
也可以单独查看某个表的所有字段的字符编码
SHOW FULL COLUMNS FROM table_name;
让上述修改生效,必须重启mysql server
远程访问mysql
mysql -uroot -p -h10.154.0.43 -P3306
# c/c++ 学习互助QQ群:877684253