There is also sql_safe_updates which (among other things) will cause updates/deletes not using keys to fail. Also, MySQL 5.6 made an attempt at fixing the replication part of this issue (see slave_allow_batching and slave-rows-search-algorithms).

Davi


On Wed, Jun 19, 2013 at 2:40 AM, Lixun Peng <penglixun@gmail.com> wrote:
Hi Sergei,

You are right, let users add primary key is best.
But I can't let users who don't want to create primary key can't use our MySQL service.
Amazon RDS also allow users to create the tables without primary key, just change binlog_format to MIXED to solve replication problem.

I think this feature is very useful for any MySQL cloud service providers, all of them will face this problem in one day.
I will try to do some analysis/research in this feature implement first, I will need your help :-)

I will notice any new updates in this email.


Thanks,
Lixun
 



On Wed, Jun 19, 2013 at 5:14 PM, Sergei Golubchik <serg@mariadb.org> wrote:
Hi, Lixun!


On Jun 18, Lixun Peng wrote:
> Hi,
>
> As we know, InnoDB has implicit primary key if a table hasn't defined
> a primary key.  However MySQL server doesn't know this primary key, so
> this primary key will not apear in binlog.
>
> When we are using ROW format binlog for replication, if a table has no any
> indexes, that's a disaster. If a table without indexes do a DML
> (UPDATE/DELETE), of course it will run a long time in master, but in slave,
> it still need a long time. It will cause serious slave replication delay.
...

> I think mysql server can do the same thing as InnoDB do, if user doesn't
> define the primary key, mysql can add the primary key automatically.
>
> How do you think?

Well, that's doable. A much easier solution would be to require a user
to create a primary key. It's a one-line change:

-  Table_flags ha_table_flags() const { return cached_table_flags; }
+  Table_flags ha_table_flags() const { return cached_table_flags | HA_REQUIRE_PRIMARY_KEY; }

But what you suggest is possible too, I believe.

Regards,
Sergei



--
Senior Database Engineer @ Taobao.com

Mobile Phone: +86 18658156856 (Hangzhou)

_______________________________________________
Mailing list: https://launchpad.net/~maria-developers
Post to     : maria-developers@lists.launchpad.net
Unsubscribe : https://launchpad.net/~maria-developers
More help   : https://help.launchpad.net/ListHelp