这段时间使用MySQL的一些记录 博客分类: 开源分析系统使用 mysql
程序员文章站
2024-03-22 20:43:16
...
自从Fedora19之后,Linux上的MySQL就被MariaDB所取代,这段文字见如下引用:
MySQL was replaced by MariaDB since Fedora 19 (http://fedoraproject.org/wiki/Features/ReplaceMySQLwithMariaDB). To install MariaDB Server you have to execute the following command: yum install mariadb mariadb-server To start MariaDB on Fedora 20, execute the following command: systemctl start mariadb.service To autostart MariaDB on Fedora 20, execute the following command: systemctl enable mariadb.service After you started MariaDB (do this only once), execute the following command: /usr/bin/mysql_secure_installation This command will ask you some inputs to set root password, remove anonymous users, disallow root login remotely, remove test database and reload privilege tables.
基本安装和启动
从上面的信息可以看出,基本上通过yum install安装的MariaDB,命令与MySQL相关命令基本差不多。
我们可以通过命令行连接MariaDB:
mysql -u 用户名 -h 地址 -p,输入密码即可 show databases 显示出所有mysql中的数据库; show tables;
也可以在Mac下使用客户端,这里推荐一个比较好用的客户端(仅Mac下):Sequel Pro
如果新建的数据表都是GBK(或latin,有些某人配置为latin的),通过下面的命令可以修改其字符集为"UTF-8":
ALTER DATABASE diablo DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
创建用户,以及分配对应权限的命令格式如下:
CREATE USER username IDENTIFIED BY 'password'; CREATE DATABASE databasename; CREATE DATABASE IF NOT EXISTS yourdbname DEFAULT CHARSET utf8 COLLATE utf8_general_ci; GRANT ALL ON databasename.* TO 'username'@‘%'; flush privileges;
使用组合mysqldump以及mysql命令,可以一次性地将数据进行备份
mysqldump db_test -u root -ppassword --add-drop-table | mysql db_for_test -u root -ppassword
以上是在同一台MySQL服务器上复制数据库的方法。如果要复制到远程另一台MySQL服务器上,可以使用mysql的“ -h 主机名/ip”参数。前提是mysql允许远程连接,且远程复制的传输效率和时间可以接受。
#mysqldump db1 -uroot -ppassword --add-drop-table | mysql -h 192.168.1.22 newdb -uroot -ppassword
Linux启动和停止Mysql服务
采用netstat -nlp查看mysql服务的状态
命令行方式:
开启 ./mysqld_safe & 关闭 mysqladmin -uroot shutdown
rpm方式安装的:
开启 service mysql start 关闭 service mysql stop
在命令行启动mysql时,如不加"--console",启动、关闭信息不在界面中显示,而是记录在安装目录下的data目录里,文件名一般是hostname.err,通过此文件查看mysql的控制台信息。
使用MySQL处理表连接时的错误
使用inner join两张数据库表时,出现连接错误:
select * from campaign_message m inner join spread_student s on m.phone=s.phone; Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation '='
在*网站上,查看其出现的问题:
标题为:Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation '=' in MySQL Stored Procedure。
某些人给出的答案为:
so the answer is simple. It seems you missed the change as stated by MKJ ^^ but the actual syntax to alter your tables looks like this.
Applied as an individual script or at the end of your create table statement you should be able to relate all related tables back to the same charset
|
执行语句完成后,就可以使得两张数据表能够正常执行连接了。
之前出现的问题就是,有一张数据表声明的时候没有按照正常的character set,而是采用了其他的字符集。
MySQL处理表锁死的状态
同事在处理mysql查询的时候,遇到问题,针对其中的某张表查询不能正常执行(甚至于最简单的select也不行),而其他表查询都可以。
从网上找到的一些资料,可以通过命令行的方式查找到具体线程:
SHOW PROCESSLIST显示哪些线程正在运行。您也可以使用mysqladmin processlist语句得到此信息。如果您有SUPER权限,您可以看到所有线程。否则,您只能看到您自己的线程(也就是,与您正在使用的MySQL账户相关的线程)。如果有线程在update或者insert 某个表,此时进程的status为updating 或者 sending data。
如果您得到“too many connections”错误信息,并且想要了解正在发生的情况,本语句是非常有用的。MySQL保留一个额外的连接,让拥有SUPER权限的账户使用,以确保管理员能够随时连接和检查系统(假设您没有把此权限给予所有的用户)。
下面就是我们执行了该命令出现的表结构:
其中的state显示出了等待的一些基本锁,以及这些锁的基本状态。
其中的第一个字段为线程id,可以对线程id执行kill操作,手动执行所有需要被kill掉的线程,就可以保证在查询过程中不会出现死锁问题。